MAT

MAT:全稱(Eclipse Memory Analyzer)內(nèi)存分析工具
下載地址:https://www.eclipse.org/mat/downloads.php (免費的)

mat下載

可根據(jù)自己系統(tǒng)進行下載,windows / mac / linux都有,下載完畢解壓即可,不需要安裝。

雙擊 MemoryAnalyzer.exe 打開:


MemoryAnalyzer.exe

打開之后,點擊 file 打開對應(yīng)的 dump 文件即可。注意:打開時如果沒有看到dump文件,則在下面文件名選擇all files即可。
導入dump文件后,選擇第一個Leak Suspects Report(泄漏嫌疑報告),后點擊finish

image.png

接下來這個圖片說的是內(nèi)存泄露的情況,并且指出了導致內(nèi)存泄露的代碼。一般情況下都是因為內(nèi)存泄露導致的內(nèi)存溢出。overview界面會以餅圖的方式顯示當前消耗內(nèi)存最多的幾類對象,可以使我們對當前內(nèi)存消耗有一個直觀的印象。但是,除非你的程序內(nèi)存泄漏特別明顯或者你正好在生成hprof文件之前復現(xiàn)了程序的內(nèi)存泄漏場景,你才可能通過這個界面猜到程序出問題的地方。(下圖就是正好在生成hprof文件之前復現(xiàn)了程序的內(nèi)存泄漏場景,嘿嘿~)

解決內(nèi)存溢出的思路:
占用內(nèi)存過大的對象有哪些?
這些對象被誰引用?
定位到具體的代碼

image.png

下圖深色部分可以看到,problem suspect占比310M,可以先從這里下手去看,點擊下面的details進入
image.png

下圖可以看到有個ArrayList new出來的對象 一直往IdleConnectionReaper里面塞


圖6

通過上面IdleConnectionReaper查找代碼發(fā)現(xiàn),getosssign方法使用完后沒有調(diào)用client.shuntdown方法導致。和網(wǎng)友的一篇文章類似:https://www.cnblogs.com/dcz2015/p/15947137.html,到此問題就已經(jīng)解決,但是,如果還有其他問題,可以根據(jù)Dorminator Tree(支配樹)分析。
下面先了解2個概念:
shallow heap:指的是某一個對象所占內(nèi)存大小。
retained heap:指的是一個對象的retained set所包含對象所占內(nèi)存的總大小。
同樣按照圖6的方法展開查詢調(diào)用路徑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容