1、場景
通常,使用eclipse的mat圖形化工具打開dump的時候都會內存溢出.
對於比較小的dump,eclipse可以打開,但一旦dump文件太大,eclipse就有點束手無策。
這時候怎么辦呢?可以使用linux下的mat,既Memory Analyzer Tools
2、dump生成
dump可以是內存溢出時讓其自動生成,或者手工直接導。配置jvm參數-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/biapp/m.hprof
手工直接導,PID為進程號
jmap -dump:live,format=b,file=m.hprof PID
3、准備工作,下載LINUX的MAT
地址:http://www.eclipse.org/mat/downloads.php
在linux服務器執行命令 uname –m查看版本
下載對應的版本
下載后將包傳到linux服務器上解壓。
MemoryAnalyzer.ini 配置文件可以修改最大的內存,默認1G基本夠用了。
4、在linux執行分析命令
執行命令
./ParseHeapDump.sh m.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components。
m.hprof就是jvm的dump文件,在mat目錄下會生成3份.zip結尾的報告和一些m.相關的文件,將生成的m.hprof相關的文件都下載到windows本地磁盤。
如:
5、打開分析報告
1)使用瀏覽器
解壓縮以.zip結尾的文件,解壓后
使用瀏覽器打開index.html文件內容,查看分析報告
查看Class Histogram一項
發現其中一個類對象占用了7個G,這里的Heap單位都是Byte,自行換算。
Shallow Heap 既對象本身的大小
Retained Heap 對象自身加起直接或間接引用的大小
2)使用eclipse的mat工具
Eclipse需要按照mat工具,安裝步驟可以百度,或者參考
https://jingyan.baidu.com/article/cb5d61053562ed005c2fe022.html
如果直接打開dump文件還是會內存溢出,所以可以使用eclipse打開分析報告即可。
使用eclipse-File-Open File打開dump文件,如下:
會提示錯誤,點擊OK忽略錯誤,然后選擇第三項,重新打開之前的運行報告
點擊Next,出現如下界面
選擇其中的一份報告打開,如m_System_Overview.zip
得到相同的結果