dump文件傳輸到本地進行分析, 經常須要大量的等待時間。 使用IBM的eclipse的MAT工具能夠直接在服務器上進行快速DUMP分析。php
運行環境要求
- linux操做系統
- JDK8 以上
下載MAT的linux版本
Eclipse的MAT工具下載連接
MAT支持各類操做系統,找到Linux版本下載下來html
# 運行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進程各類疑難雜症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文件,很小能夠直接拷貝到本機linux
jmap_Leak_Suspects.zip jmap_System_Overview.zip jmap_Top_Components.zip
查看報告結果
有兩種查看報告的方法api
- 直接把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
問題解決app
MAC 如何使用 mat工具
MAC 版本 Eclipse的MAT工具下載連接
下載加壓縮之後eclipse
#修改內存大小,默認1G不夠用 vi mat.app/Contents/Eclipse/MemoryAnalyzer.ini
運行工具
sudo mat.app/Contents/MacOS/MemoryAnalyzer
## 一、點擊最上面的Overview的 tab ## 二、點擊最早面的 Open a Head Dump 就能夠選擇加載dump文件了
轉自: http://www.moheqionglin.com/site/blogs/84/detail.html
常常使用, 故記錄於此