色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

內存泄漏如何排查?

洪振霞2年前13瀏覽0評論

使用MAT工具排查內存泄漏的問題

一.概要說明

使用MemoryAnalyzer來分析生產環境的Java堆轉儲文件,可以從數以百萬計的對象中快速計算出對象的RetainedSize,查看是誰在阻止垃圾回收,并自動生成一個LeakSuspect(內存泄露可疑點)報表。

備注:ShallowHeap:一個對象內存的消耗大小,不包含對其他對象的引用

RetainedHeap:是shallowHeap的總和,也就是該對象被GC之后所能回收到內存的

二.操作步驟

1.初步判定是否存在內存泄漏問題,壓測前后內存空間是否釋放。使用命令:free–h

2.若存在內存泄漏,使用命令:jmap-dump:live,format=b,file=heap.hrof<pid>。

pid是JVM進程的id,

heap.hrof

是生成的文件名稱,在執行命令的目錄下面。

備注:在JVM的配置參數中可以添加-XX:+HeapDumpOnOutOfMemoryError參數,當應用拋OutOfMemoryError時自動生成dump文件。

3.使用MAT工具打開heap文件。

4.打開工具后,重點關注幾個選項:

備注:點擊Details進入詳情頁面。在詳情頁面ShortestPathsTotheAccumulationPoint表示GCroot到內存消耗聚集點的最短路徑,如果某個內存消耗聚集點有路徑到達GCroot,則該內存消耗聚集點不會被當做垃圾被回收。

備注:ClassName:類名稱,java類名

Objects:類的對象的數量,這個對象被創建了多少個

ShallowHeap:一個對象內存的消耗大小,不包含對其他對象的引用

RetainedHeap:是shallowHeap的總和,也就是該對象被GC之后所能回收到內存的

補充:

為了找到內存泄露,獲取了兩個堆轉儲文件,兩個文件獲取時間間隔是一天(因為內存只是小幅度增長,短時間很難發現問題)。對比兩個文件的對象,通過對比后的結果可以很方便定位內存泄露。

MAT同時打開兩個堆轉儲文件,分別打開Histogram,選擇GroupBypackage,然后對比各對象的變化。

三.總結

MAT可以用它來分析內存問題,也可以用來監控整個Java應用程序的狀態和行為。通過讀取應用程序運行時由Java運行時環境生成的轉儲文件快照,MemoryAnalyzer使您能夠分析那些調試代碼可能無法發現的復雜問題。