1. 程式人生 > >Analyzer tool(MAT)分析JVM內存泄露案例

Analyzer tool(MAT)分析JVM內存泄露案例

gc roots 菜單 exc fff open 技術分享 consumer tool 圖形

1、監控目的
技術分享圖片

2、常用分析工具
技術分享圖片

3、分析案例-MAT
MAT 介紹及分析:
啟動MAT, 然後選擇菜單項 File- Open Heap Dump 來加載需要分析的堆轉儲文件。文件加載完後,可以看到如圖 1所示的界面:
技術分享圖片
從圖1可以看到他的大部分功能:
? Histogram 可以列出內存中的對象,對象的個數及大小
? Dominator Tree 可以列出哪個線程以及線程執行的哪些對象占用空間
? Top consumers 通過圖形列出最大的object
? Leak Suspects 通過MA自動分析泄漏的原因。
Histogram 如圖2:
Objects:類的對象數量
Shallow size:對象本身占用內存的大小,不包含對其他對象的引用,也就是對象頭加成員變量(不是成員變量的值)和總和。:

Retained size:是該對象自己的shallow size+ 從該對象直接或間接訪問到對象的shallow size之和。換句話說,retained size 是該對象被GC之後所能回收到內存的總和。

從圖2 可以發現,java.util.HashMap 類的對象占用的很多的空間。
技術分享圖片

Dominator Tree 如圖3:
從圖3 中可以發現com.csii.ibs.lc.ClusterOnlineUserRegistry 占了很多內存空間
技術分享圖片

Top Comsumers 如圖4:
顯示內存中最大的對象有哪些,及其對應的類是哪些,類加載器classloader是哪些。有些時候我們在這裏可以看到代碼泄漏的位置。

技術分享圖片

4、案例一則:
今天線上業務JVM監控出現有內存泄露情況
技術分享圖片
技術分享圖片

選擇 Path To GC Roots ->exclude weak references,過濾
技術分享圖片
然後就很直觀的分析出什麽導致的了,然後優化。

Analyzer tool(MAT)分析JVM內存泄露案例