內存分析工具(MAT)介紹(一)-入門

  MAT即Memory Analyse Tool 是java內存分析的利器。基於這個工具,我們可以分析定位很多疑難問題。鑑於這個工具實用性非常強,介紹一下該工具的使用。

MAT使用場景

  MAT主要就是用來分析內存的問題,下面2點就是MAT的使用場景。

  • 定位內存泄漏問題、gc異常問題
  • 內存優化,分析內存使用合理性,減少內存浪費

因爲dump文件裏面有線程信息,所以MAT也能看到線程調用棧以及局部變量,對分析一些線程問題也有幫助。

MAT入門

  首先dump一份jvm內存文件下來,jmap -dump:format=b,file=heapdump.phrof pid(可以指定live選項如果指定了live選項則在dump之前會進行一次Full GC,只會dump下來存活的對象)。用MAT打開dump文件,首先會得到一份報告,如下圖:
MAT概圖
  工作區右邊上面部分是dump下來的內存大小、類的數量、對象的數量、類加載器的數量以及非可達對象的直方圖鏈接(非可達對象即在下一次GC時會回收的對象)。右邊下面部分的餅圖是大對象的情況,鼠標移動到其中一塊,昨邊會出現這個對象的詳細情況。mat計算對象的大小從2個維度計算的:

  • shallow size : 對象本身佔用堆空間的大小
  • retained size: 對象及其控制的對象佔用堆空間的大小總和。

這個餅圖裏面大對象是以retained size作爲依據的。

  點擊菜單按鈕"Leak Suspects"得到一份內存疑似泄漏的報告:
生成內存泄漏報告
內存泄漏報告
用戶可以重點懷疑報告中的類,調查一下系統中的類是否存在泄漏的可能。所謂內存泄漏就是指那些代碼中已經用不到,但是GC Root可達的對象。

下一節介紹幾個重要的概念…

MAT主要概念

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章