使用Java監控工具出現 Can't attach to the process
阿新 • • 發佈:2019-01-08
問題重現
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
➜ jinfo -flags 3032
Attaching to process ID 3032, please wait...
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can
't attach to the process
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process
at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal
$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:163) |
解決辦法
1 | echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope |
再次執行時就可以得到結果了
1 2 3 4 5 6 7 | ➜ jinfo -flags 3032 Attaching to process ID 3032, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.5-b02 Non-default VM flags: -XX:InitialHeapSize=41943040 -XX:MaxHeapSize=536870912 -XX:MaxNewSize=178782208 -XX:M inHeapDeltaBytes=524288 -XX:NewSize=1572864 -XX:OldSize=40370176 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC Command line: -Dosgi.requiredJavaVersion=1.6 -XX:MaxPermSize=256m -Xms40m -Xmx512m |
原因
這是因為新版的Linux系統加入了 ptrace-scope
機制. 這種機制為了防止使用者訪問當前正在執行的程序的記憶體和狀態, 而一些除錯軟體本身就是利用 ptrace
來進行獲取某程序的記憶體狀態的(包括GDB
),所以在新版本的Linux系統, 預設情況下不允許再訪問了. 可以臨時開啟. 如:
1 | echo 0 > /proc/sys/kernel/yama/ptrace_scope |
永久寫到檔案來持久化:
1 2 3 4 |
emacs /etc/sysctl.d/10-ptrace.conf
新增或修改為以下這一句:(0:允許, 1:不允許)
kernel.yama.ptrace_scope = 0
|