2013-11-27 32 views

回答

17

獲取堆轉儲的最簡單方法是使用jmap。在具有java進程的機器上執行jmap命令。使用示例:

jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842 

使用jps知道java Pid。


你也可以通過jvisualvm做堆轉儲。您可以通過jmxjstatd連接到遠程機器。您可以進行堆轉儲並存儲在遠程計算機上。

要分析堆轉儲可以建議你:MAT。非常強大的工具,可以讓你快速理解問題。你可以找到here好的inro到MAT。


如果你不想長一段時間就可以使二進制轉儲(You can use gcore or gdb)停止的應用程序。你可以use jmap to analyze gdb dump。您可以在atlassian blog上閱讀更多信息。當心someissues

+0

您可能需要使用「sudo」 – th3morg

5

除了「轉儲堆」之外的另一種方式 - jvisualvm的-Button是通過JMX接口。這種方式甚至允許您指定存儲轉儲的位置。

使用jconsole或帶有JMX插件的jvisualvm連接到tomcat的JMX服務器。然後得到com.sun.management - >HotSpotDiagnotic - >Operations。在dumpHeap旁邊填寫兩個參數。從Oracle的文檔(見here):

參數:

OUTPUTFILE - 與系統有關的文件名

現場 - 如果爲true轉儲只能活對象即是從別人可達對象

然後按dumpHeap並在寫入轉儲時觀察虛擬機凍結一段時間。

1

我推薦可視VM http://visualvm.java.net/它是一個可以連接到tomcat,創建和讀取堆轉儲,創建線程轉儲,CPU和內存採樣器的一站式工具。

如果您使用新的jdk 1.7,VisualVM已經打包在您的jdk文件夾中。

相關問題