dump文件傳輸到本地進行分析, 常常需要大量的等待時間。 使用IBM的eclipse的MAT工具可以直接在服務器上進行快速DUMP分析。
運行環境要求
- linux操作系統
- JDK8 以上
下載MAT的linux版本
Eclipse的MAT工具下載鏈接
MAT支持各種操作系統,找到Linux版本下載下來
# 運行uname -m 看一下linux是 x86_64還是 x86的幫助你選擇下載那個版本。 uname -m #x86_64
http://iso.mirrors.ustc.edu.cn/eclipse/mat/1.8/rcp/MemoryAnalyzer-1.8.0.20180604-linux.gtk.x86_64.zip
解壓配置MAT基本參數
unzip MemoryAnalyzer-1.8.0.20180604-linux.gtk.x86_64.zip ## 修改MAT的內存大小, 注意這個大小要根據你dump文件大小來的,如果dump文件是5GB那么 這里最好配>5GB 否則會報MAT內存不足的異常 ## 修改MemoryAnalyzer.ini 的 -Xmx6024m vi MemoryAnalyzer.ini
jmap dump整個堆
想了解更詳細的請看這篇博文望聞問切使用jstack和jmap剖析java進程各種疑難雜症
jmap -dump:format=b,file=jmap.info PID
MAT分析 dump
./ParseHeapDump.sh jmap.info org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
等待結果….
結果會生產如下三個zip文件,很小可以直接拷貝到本機
jmap_Leak_Suspects.zip jmap_System_Overview.zip jmap_Top_Components.zip
查看報告結果
有兩種查看報告的方法
- 直接把zip下載到本地,然后解壓用瀏覽器查看index.html
- 把zip下載到本地, 用MAT可視化工具解析zip
遇到問題
Unable to initialize GTK+
遇到這個問題的話,是因為ParseHeapDump.sh
里面需要調用GTK的一些東西。解決方法:
vi ParseHeapDump.sh #注釋掉 "$(dirname -- "$0")"/MemoryAnalyzer -consolelog -application org.eclipse.mat.api.parse "$@"這一行 #然后加入下面 #注意plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar要根據你自己本地的文件名做修改調整 java -Xmx4g -Xms4g \ -jar plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar \ -consoleLog -consolelog -application org.eclipse.mat.api.parse "$@"
然后繼續運行
./ParseHeapDump.sh jmap.info org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
問題解決
MAC 如何使用 mat工具
MAC 版本 Eclipse的MAT工具下載鏈接
下載加壓縮以后
#修改內存大小,默認1G不夠用 vi mat.app/Contents/Eclipse/MemoryAnalyzer.ini
運行
sudo mat.app/Contents/MacOS/MemoryAnalyzer
## 1、點擊最上面的Overview的 tab ## 2、點擊最先面的 Open a Head Dump 就可以選擇加載dump文件了
轉自: http://www.moheqionglin.com/site/blogs/84/detail.html
經常使用, 故記錄於此
