java - jmap 工具仅作为 root 和输出列不明确

标签 java jmap

在带有 Oracle JDK 10.0.1-64 位的 Ubuntu Mate 18.04-64 位上使用 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)

使用root用户运行以下命令时

jmap -clstats <pid>

一切正常,但我发现在理解输出列的含义时遇到了一些困难: enter image description here 是否有任何官方文档解释每一列的含义?

最佳答案

通过运行此命令,可以预期与 ClassLoaders 相关的输出,但它在 JDK8 中被修改为打印 jcmd {pid} GC.class_stats 命令的结果。一些细节可以在 JDK-8010507 中找到。和 JDK-8195682问题。

至于输出 - 没有比 this one 更多的文档了.可以在 OpenJDK VM 源代码中找到一些描述,heapInspection.cpp文件。我觉得这个输出不太有用,但这里有一些解释(基于这个标题的描述,和 Java class format description ):

  • Index:该类的索引。
  • Super: 父类(super class)的索引。如果 -1,则没有父类(super class)(例如数组类型)
  • InstBytes:类的所有实例占用的字节数(以字节为单位)。
  • KlassBytes:类本身占用的字节数(以字节为单位)。 (此类的 InstanceKlass 或 ArrayKlass 的大小。)
  • annotations:所有注释的大小(以字节为单位)
  • CpAll:常量池所有部分的大小(Cp + CpTags + CpCache + CpOperands + CpRefMap 的总和)
  • MethodCount:这个类中的方法数(包括构造函数)
  • Bytecodes:类中字节码命令占用的大小
  • MethodAll:方法及其元数据占用的所有空间的总和(MethodBytes + Constmethod + Stackmap + Methoddata)
  • ROAll:可以(可能)放入只读存储器的所有类元数据的大小。 (这可能会随着 CDS design 而改变)
  • RWAll: 必须放在读/写内存中的所有类元数据的大小。 (这可能会随着 CDS design 而改变)
  • 总计:ROAll + RWAll。请注意,这不包括 InstBytes(因此没有实例占用的空间)
  • ClassName:完全限定的类名。

希望对您有所帮助。

关于java - jmap 工具仅作为 root 和输出列不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50986734/

相关文章:

java - JAVA什么时候使用静态初始 block ?

Java 在计时器运行前终止

java - 何时使用 jmap -J<flag> 选项?

java - 你如何从 Shell 强制垃圾收集?

java - JMap.java - 尝试连接到调试服务器时超时 - SwDbgSrv.exe

java - 为什么我的实体不能与 SpringBoot 一起工作,尽管它可以在没有 SpringBoot 的情况下工作

java - AndroidRuntime(5940) : java. lang.RuntimeException: 无法启动 Activity ComponentInfo

Java Spring View 格式化货币

java - jmap直方图中的这些对象是什么?