2016-06-20 32 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