为了账号安全,请及时绑定邮箱和手机立即绑定

jmap工具仅在根和输出列不清楚时才起作用

jmap工具仅在根和输出列不清楚时才起作用

蛊毒传说 2021-04-09 18:15:44
在具有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 loadedat 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>一切正常,但我发现在理解输出列的含义时遇到了一些困难:是否有任何官方文档解释每列的含义?
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

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

至于输出-没有比这更多的文档了。一些描述可以在OpenJDK VM源代码heapInspection.cpp文件中找到。我发现此输出不太有用,但是这里有一些解释(基于此标头中的描述以及Java类格式description):

  • 索引:该类的索引。

  • 超级:超类的索引。如果为-1,则不存在超类(例如,针对数组类型的情况)

  • InstBytes:该类的所有实例占用的字节数(以字节为单位)。

  • KlassBytes:类本身占用的字节数(以字节为单位)。(此类的InstanceKlass或ArrayKlass的大小。)

  • 注解:所有注解的大小(以字节为单位)

  • CpAll:常量池所有部分的大小(Cp + CpTags + CpCache + CpOperands + CpRefMap的总和)

  • MethodCount:此类中的方法编号(包括构造函数)

  • 字节码:类中字节码命令占用的大小

  • MethodAll:方法及其元数据所占用的所有空间的总和(MethodBytes + Constmethod + Stackmap + Methoddata)

  • ROAll:可以(可能)放置在只读内存中的所有类元数据的大小。(这可能会随着CDS设计而改变)

  • RWAll:必须放置在读/写存储器中的所有类元数据的大小。(这可能会随着CDS设计而改变)

  • 总计: ROAll + RWAll。请注意,这不包括InstBytes(因此实例不占用空间)

  • ClassName:完全限定的类名称。

希望能帮助到你。


查看完整回答
反对 回复 2021-04-21
  • 1 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信