Mac JDK8 jmap can't attach to the process.

1.问题: jmap/jinfo 无法attach上jvm进程, jstat可以正常使用

之前一直用Windows/Linux没有这个问题,最近换了Mac尝试了下确实存在

环境: JDK1.8.0_48

表现:

jmap/jinfo均无法attach上jvm进程,提示缺少系统权限[实际已经验证切换root账号启动进程]

can't attach to the process. could be caused by an incorrect pid or lack of privileges


image.png

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

image.png

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

image.png

4.结论:

  1. JDK8 MacOS下有些小版本下存在无法attach java进程bug。建议升级JDK9以上版本。
  2. 系统环境中只要有相关执行权限(root或正常账户都可以),并且启动java进程使用的jdk环境和jmap/jinfo/jps这些jvm命令是一个jdk环境正常应该都可以attach上进程。
    如果attch不上,检查下:是否存在Idea开发环境中启动java进程和jmap查看进程的jdk版本不一致
    比如:Idea中启动项目时用的JDK11, jmap时使用的系统环境变量设置的JDK8 (java -version) check下
    版本不一致造成的jmap失败可以参考:

https://www.jianshu.com/p/838d7a76befe

5.感谢

李睿指导帮助,继续加油。

你可能感兴趣的:(Mac JDK8 jmap can't attach to the process.)