Jvm 如何获取Java8元空间转储(不是堆转储)

Jvm 如何获取Java8元空间转储(不是堆转储),jvm,dump,metaspace,Jvm,Dump,Metaspace,是否有任何工具能够从Java8 hotspot vm获取元空间转储?您似乎遇到了类加载泄漏。 使用 jmap-clstats PID转储类装入器统计信息 jcmd PID GC.class_stats打印每个加载类的内存使用情况的详细信息。后者需要-XX:+解锁DiagnosticVMOptions 堆转储也会有所帮助,因为元空间中的每个类在堆中都有一个对应的java.lang.class实例。您希望以何种形式获得它,以及它的用途?请注意,元空间中的数据不是Java对象。可能您对热点内部结构

是否有任何工具能够从Java8 hotspot vm获取元空间转储?

您似乎遇到了类加载泄漏。
使用

  • jmap-clstats PID
    转储类装入器统计信息
  • jcmd PID GC.class_stats
    打印每个加载类的内存使用情况的详细信息。后者需要
    -XX:+解锁DiagnosticVMOptions

堆转储也会有所帮助,因为元空间中的每个类在堆中都有一个对应的
java.lang.class
实例。

您希望以何种形式获得它,以及它的用途?请注意,元空间中的数据不是Java对象。可能您对热点内部结构不感兴趣,但对其他内容感兴趣。我们有一个应用程序使用1G的MaxMetaspaceSize导致Metaspace OOM错误,我想知道Metaspace内存是如何使用的。嗨,apangin,谢谢您的建议。我能够使用jmap-dump命令转储整个堆,但是我很难运行jhat命令来分析转储文件。堆转储大约为5GB,jhat已经运行了2个小时没有完成,这正常吗?运行大约2小时后,jhat最终以堆空间OOM错误终止。@czh即使在大堆转储时也可以正常工作。@czh您也可以尝试VisualVM或您的工具包以获得更大的堆。如何解释下面的统计信息以了解我对METASPACE OOM的修复是否有效?转储原因:JCMD MaxMetaspaceSize:536870912 B CompressedClassSpaceSize:528482304 B类空间已使用:21412264 B类空间容量:25373696 B类空间已提交:44572672 B类空间保留:1073741824 B非类空间已使用:178477376 B非类空间容量:219028480 B非类空间已提交:347594752 B非类空间预留座位:348127232 B