【问题标题】:Running jcmd using JDK-11 on JDK-8 java process not running successfully在 JDK-8 java 进程上使用 JDK-11 运行 jcmd 未成功运行
【发布时间】:2020-05-28 20:14:42
【问题描述】:

我正在尝试使用 jcmd 监控 tomcat 的本机内存,但出现以下异常: 命令:jcmd 14533<pid of tomcat> VM.native_memory summary

我已经安装了 2 个 jdk's jdk-11jdk-8

Tomcat 由 jdk-8 运行,jcmd 使用 jdk-11 然后我得到以下异常:

com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file /proc/31752/root/tmp/.java_pid31752: target process 31752 doesn't respond within 10500ms or HotSpot VM not loaded
    at jdk.attach/sun.tools.attach.VirtualMachineImpl.<init>(VirtualMachineImpl.java:100)
    at jdk.attach/sun.tools.attach.AttachProviderImpl.attachVirtualMachine(AttachProviderImpl.java:58)
    at jdk.attach/com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:207)
    at jdk.jcmd/sun.tools.jcmd.JCmd.executeCommandForPid(JCmd.java:114)
    at jdk.jcmd/sun.tools.jcmd.JCmd.main(JCmd.java:98)

我用 java 进程附加了-XX:+StartAttachListener,但它不起作用。

【问题讨论】:

标签: java jcmd


【解决方案1】:

如果您在 linux 上将 tomcat 作为服务运行,请检查单元文件中的以下配置,即 tomcat.service

  1. PrivateTmp=yes,应该删除。由于 PrivateTmp=yes 创建工具无法访问的私有 /tmp 文件夹
  2. 如果您有 ProtectSystem=strict,请添加 ReadWritePaths=/tmp/

查看系统单元文件配置的手册页

【讨论】:

    【解决方案2】:

    可能是用户权限问题:jmap 必须以与 java 进程相同的用户运行。例如如果所有者是usera,并且它在包含的docker中运行,则以用户usera的身份执行jmap

    docker exec --user usera -it container_id jmap -dump:format=b,file=/home/usera/memorydump.bin 1
    

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 2021-09-28
      • 2019-11-16
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多