【问题标题】:jmap tool works only as root and output columns are not clearjmap 工具仅作为 root 工作,并且输出列不明确
【发布时间】:2018-12-01 20:39:11
【问题描述】:

在 Ubuntu Mate 18.04-64bits 和 Oracle JDK 10.0.1-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)

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

jmap -clstats <pid>

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

【问题讨论】:

  • 这是唯一可用的信息:-clstats Prints class loader wise statistics of Java heap. For each class loader, its name, how active it is, address, parent class loader, and the number and size of classes it has loaded are printed.

标签: java jmap


【解决方案1】:

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

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

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

希望对你有帮助。

【讨论】:

  • 非常感谢您的回答,非常有用。
  • Cp、CpTags、CpCache、CpOperands、CpRefMap 都是什么意思?
猜你喜欢
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 2015-08-24
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
相关资源
最近更新 更多