MAT工具分析Dump文件(大對象定位)


前段時間線上服務經常發生卡頓,經過排查發現是大對象引起的Fullgc問題,特此記錄排查邏輯。

目的

定位產生大對象的代碼

一、獲得服務進程

jps -l 

image-20210506143053217

27885\32474 對應的即為運行的Jar

ps:也可使用netstat -lnput|grep 啟動端口號 等方式查找

二、生成dump文件

jmap -dump:format=b,file=文件路徑及名字.dump 上步獲得進程號
#jmap -dump:format=b,file=test.dump 27885

三、下載mat工具

下載

四、使用mat工具導入第二步生成的dump文件

image-20210506143902057

五、導入后得到如下界面

image-20210507094559141

六、定位大對象(方法一)

  1. 點擊上圖中Histogram,可顯示出每個類產生的實例數量,以及所占用的內存大小;
    Shallow Heap 和 Retained Heap分別表示對象自身不包含引用的大小和對象自身並包含引用的大小。默認的大小單位是 Bytes,可以在 Window - Preferences 菜單中設置單位,圖中設置的是KB。

  2. 根據Shallow Heap 和 Retained Heap找出占用最大的對象(下圖)

    紅框內就是我的包路徑,這時已經大概知道是什么對象占用了,去項目中檢查大概率能定位,我遇到的是一次性查出全部的數據,太多導致。image-20210507161153347

七、定位大對象(方法二)

點擊第五步圖中 Leak Suspects 后,MAT會自動分析生成一份報告,通過報告,也能判斷出和上一步一樣的結果

最后,找到代碼位置了,其他就是要分析具體是什么原因導致產生大對象。針對問題進行代碼、JVM、業務需求優化。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM