2016-06-20 18 views
8

是否有任何工具能够从Java8热点虚拟机获得元数据空间转储?如何获得Java8元数据空间转储(不是堆转储)

+3

你想用哪种形式获得这个和什么?请注意,Metaspace中的数据不是Java对象。可能你对HotSpot内部结构不感兴趣,但对其他内容感兴趣。 – apangin

+0

我们有一个应用程序导致MaxMetaspaceSize 1G的Metaspace OOM错误,我想知道如何使用Metaspace存储器。 – czh

回答

9

看来你会遇到类加载泄漏。
使用

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

堆转储也将有所帮助,因为Metaspace中的每个类在堆中都有相应的java.lang.Class实例。

+0

嗨apangin,谢谢你的建议。我能够使用jmap -dump命令转储整个堆,但是我正在努力运行jhat命令来分析转储文件。堆转储大约5GB,并且jhat已经运行了2个小时而没有完成,这是正常的吗? – czh

+0

jhat运行约2小时后最终终止堆空间OOM错误。 – czh

+1

@czh [Eclipse内存分析器](http://www.eclipse.org/mat/)即使在大型堆转储时也能正常工作。 – apangin