1.問題: jmap/jinfo 無法attach上jvm進程, jstat可以正常使用
之前一直用Windows/Linux沒有這個問題褐奴,最近換了Mac嘗試了下確實存在
環(huán)境: JDK1.8.0_48
表現(xiàn):
jmap/jinfo均無法attach上jvm進程响鹃,提示缺少系統(tǒng)權限[實際已經驗證切換root賬號啟動進程]
can't attach to the process. could be caused by an incorrect pid or lack of privileges
2.查詢相關資料: Mac JDK8 小版本bug => 建議升級到 JDK9
JDK8 關于DebuggerException: Can't attach symbolicator to the process的bug盟萨,https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8160376
3.解決方案
1.嘗試升級 JDK9 => jmap/jinfo 正常輸出泥耀,問題fix
2.嘗試升級 JDK11 => jmap/jinfo 正常輸出衰絮,問題fix
jhsdb jmap --heap --pid 20283
jhsdb --help
clhsdb command line debugger
debugd debug server
hsdb ui debugger
jstack --help to get more information
jmap --help to get more information
jinfo --help to get more information
jsnap --help to get more information
3.嘗試升級 JDK8 其他小版本: 1.8.0_66 / 1.8.0_131 => 問題fix
- 1.root賬戶啟動java進程, jmap/jinfo 可以attach上進程attach上進程
- 2.當前用戶啟動java進程受啥,jmap/jinfo也可以attach上進程
JDK8 小版本: 1.8.0_66 / 1.8.0_131 驗證ok
4.結論:
- JDK8 MacOS下有些小版本下存在無法attach java進程bug念秧。建議升級JDK9以上版本。
- 系統(tǒng)環(huán)境中只要有相關執(zhí)行權限(root或正常賬戶都可以)聊闯,并且啟動java進程使用的jdk環(huán)境和jmap/jinfo/jps這些jvm命令是一個jdk環(huán)境正常應該都可以attach上進程工猜。
如果attch不上,檢查下:是否存在Idea開發(fā)環(huán)境中啟動java進程和jmap查看進程的jdk版本不一致
比如:Idea中啟動項目時用的JDK11, jmap時使用的系統(tǒng)環(huán)境變量設置的JDK8 (java -version) check下
版本不一致造成的jmap失敗可以參考:
5.感謝
李睿指導幫助菱蔬,繼續(xù)加油篷帅。