1. 程式人生 > 其它 >java 記憶體爆滿排查命令

java 記憶體爆滿排查命令

1. top 一下獲取記憶體佔用率最高的pid。

2. 轉到 jdk的bin目錄,執行jdk命令。

(1)./jmap -heap pid 檢視JVM空間總體使用情況

(2)./jmap -histo pid |more 檢視類的例項數和記憶體量

(3)./jmap -histo:live pid |more 檢視所有活著的例項數量。

(4)./jmap -dump:format=b,file=dump_tomcat.dat pid將記憶體使用情況dump到檔案中

3.使用MAT工具對dump檔案進行分析。

下載MAT(Memory Analyzer Tool),一個基於Eclipse的記憶體分析工具,是一個快速、功能豐
富的JAVA heap分析工具,它可以幫助我們查詢記憶體洩漏和減少記憶體消耗。
下載地址:http://www.eclipse.org/mat/downloads.php
然後解壓,跟eclipse一樣,我們直接啟動就可以了,啟動介面如下,我們點選左上角“file”或者紅框中的“Open a Heap Dump”就可以開啟我們的Dump檔案。

Dump檔案字尾問題,找不到Dump檔案時選擇All file,就可以看到了

2. 選擇Leak Suspects Report(洩露嫌疑報告),進入到主介面

3. 看到主介面,Problem區域就是提示可能有問題的類的資訊了,我們可以看到,有一個類的例項佔了700M左右,佔用了記憶體總量90%以上了,點選Details可以檢視詳情,點選See stacktrace可以檢視跟蹤堆疊找到問題程式碼所在位置。

4. 下圖可以看出來這個物件佔用了很多的記憶體

當然我們也可以切換檢視,檢視具體物件的一些資訊,可以看到這個class生成了133w個例項,肯定是程式碼出問題了

跟蹤程式碼,定位洩露位置

點選See stacktrace,下圖是跟蹤的程式碼位置,可以清晰的看到是第幾行生成的物件,進而分析程式碼