Error attaching to process sun.jvm.hotspot.debugger.DebuggerException cannot open binary file?
问题描述
使用 jinfo jmap 查看java进程时候出现以下错误:
出错描述:使用jinfo查看jvm参数时候报错 Error attaching to process sun.jvm.hotspot.debugger.DebuggerException cannot open binary file
出错原因:Linux系统加入了 ptrace-scope
机制,防止用户访问正在执行的进程的内存,而 jinfo,jmap 这些调试类工具本身就是利用 ptrace 来获取执行进程的内存等信息。
问题处理
查看内核参数
sysctl -n kernel.yama.ptrace_scope
kernel.yama.ptrace_scope 两种取值:
- 1:表示禁止用户访问正在执行的进程的内存
- 0:表示可以访问
那么解决办法就是修改这个参数值,将其改为可以访问内存,即 0 即可
1、解决办法一
直接修改:
sysctl -w kernel.yama.ptrace_scope=0
修改完再次查看即可,再次使用jinfo 就不会出现问题,完美解决
2、解决办法二
输入值到ptrace_scope文件中
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
tee:标准输出流输出到文件,意思是将0这个值输出到ptrace_scope这个文件
再次输入,即解决问题
注意:
如果以上两种方法都不能够解决你的问题,就需要查看 当前系统的java版本与你应用启动的 java版本是否一致,应该jinfo这种都是以系统的环境变量配置的java来执行的,如果你的应用版本不一致,那么肯定是获取不到的
java -version # 查看系统java版本信息