又是一個jmx問題
jmx明明端口占用了, 而且相關java進程也起來了, 為什么會不能通過jconsole訪問jmx呢?總是:RMI non-JRMP server at remote endpoint
證書不對嗎? 為什么通過的密碼,那個機器的jms-ssl證書和我本機的大小不一樣? 權限問題? 明明沒錯的? 拿我的證書拷貝過去, 結果, 還是一樣。。。
jmx-client.xml、jmx-server.xml配置問題?修改后報密碼不對—— 那說明了原來密碼是沒問題的! 白名單?—— 我擦,現在的jmx啟動加入了白名單功能: 只允許名單內的機器去連接。 加上白名單,重啟,還是一樣。。。。
他又開始不停的說我“靠猜”了,。。
真TM郁悶。 遠程調試吧, 代碼對應不上了。方法跳來跳去, 而且又卡, 實在搞不懂啊。。 好像行號不對啊。整個更新本機代碼, 刷新,重新遠程調試 。。。 仍然不行,,, 下載遠端代碼,反編譯,發現一樣的啊, 那為什么不能代碼對應上呢 ——— 之前都是好好的,,,,, —— 看日志,我想可能是這樣吧。。。 ( 我沒意思到,我已經在猜了, 雖然日志提供了一定的證據,但是並不是直接原因)
他又開始不停的說我“靠猜”了。。。
在他的指導下, 添加上源碼,代碼可以對應得上的調試了
———— 這個就明顯不是password的問題了,如果password不對,提示不是這樣的。
仔細仔細再看看。 還是明白, 代碼跳來跳去,而且遠程調試有很卡, 我十分郁悶。
最后還是他看到了原因。說是鎖住了—— 我一聽,好像是這么回事哦。—— 這代碼里面到處是synchronized, 到處是filelock。 等等 , 還有很多的atomic的操作。。。 很多陌生api
我仔細看,可是沒看到哪里有死鎖啊,—— 他是怎么發現的? 通過jstat? jconsole? jvisualvm? jmap ? 哎
請教, 原來是死循環! 神奇的死循環!! 難怪之前調試有時候看到StackOverFlow呢! 難怪一個方法一直沒反應過來呢,難怪他進去后就一直沒出來了呢!難怪日志文件分秒不差的毫秒不差的不停打印日志呢!! 原來是死循環!!! 第一次在項目中碰到啊! 神奇了!
A類包含mapProceInfo等等
m1(processName) {
if(mapProceInfo.contains(processName)) {
復雜的process信息讀取過程,並添加到mapProceInfo中。—————— 因為配置文件配錯了,所以,mapProceInfo一直為空, 此處就顯然死循環
讀取過程中又刷新proceInfos, 刷新需要獲取proceInfos,獲取proceInfos調用的正是mapProceInfo!!!
}
return mapProceInfo.get(processName);
}
如圖, 長時間的stepping 即表示了死!循!環!!!