在具有Oracle JDK 10.0.1-64bits的Ubuntu Mate 18.04-64bits上使用jmap时,该工具仅在同时以root身份运行目标和工具时才有效,但是使用同一普通用户运行这两者会产生以下错误:
Exception in thread "main" com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file /proc/13538/cwd/.attach_pid13538: target process 13538 doesn't respond within 10500ms or HotSpot VM not loaded
at jdk.attach/sun.tools.attach.VirtualMachineImpl.<init>(VirtualMachineImpl.java:103)
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.jmap.JMap.executeCommandForPid(JMap.java:124)
at jdk.jcmd/sun.tools.jmap.JMap.main(JMap.java:114)
Run Code Online (Sandbox Code Playgroud)
使用root用户运行以下命令时
jmap -clstats <pid>
Run Code Online (Sandbox Code Playgroud)
通过运行该命令,可以预期与ClassLoader相关的输出,但是在JDK8中对其进行了修改,以打印jcmd {pid} GC.class_stats命令的结果。可以在JDK-8010507和JDK-8195682问题中找到一些详细信息。
至于输出-没有比这更多的文档了。一些描述可以在OpenJDK VM源代码heapInspection.cpp文件中找到。我发现此输出不太有用,但是这里有一些解释(基于此标头中的描述以及Java类格式description):
希望能帮助到你。