iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
自我挑戰組

展開JDK工具的30天應用之旅系列 第 14

Day14-hprof文件分析工具:mat(一)

  • 分享至 

  • xImage
  •  

mat介紹

mat全名:Memory Analyzer Tool。這篇要介紹的內容比較例外一點,mat這工具並不是JDK內自帶的工具,而是要另外下載。JDK8以前,使用的分析工具是jhat,只是在9之後就刪除了jhat工具(JEP 241: Remove the jhat Tool),改使用Oracle官方推薦的mat,也就是我們今天要介紹的主角。

下載

下載位置:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
以下示範的作業系統:macOS Big Sur
https://ithelp.ithome.com.tw/upload/images/20210929/20140481wmoGZwW8NN.png
點擊"Download"
https://ithelp.ithome.com.tw/upload/images/20210929/2014048173BD81YRvR.png
選擇適合要使用的電腦作業系統版本
https://ithelp.ithome.com.tw/upload/images/20210929/20140481LBE1pqVdBJ.png
到檔案下載的位置查看,直接點擊進行執行
https://ithelp.ithome.com.tw/upload/images/20210929/20140481ogIEcLPiOt.png
將檔案拉到Applications
https://ithelp.ithome.com.tw/upload/images/20210929/20140481VjJLB8QBcI.png
接著到Finder中,點擊『應用程式』,查看是否有mat的app
https://ithelp.ithome.com.tw/upload/images/20210929/20140481jUghxlhs1T.png
針對mat的app點擊右鍵>顯示套件內容
https://ithelp.ithome.com.tw/upload/images/20210929/20140481FWLmy3MTIm.png
點擊Contents資料夾>點個MacOS資料夾>點擊MemoryAnalyzer,便可將應用程式開啟
https://ithelp.ithome.com.tw/upload/images/20210929/20140481YggbMWgBhl.png
看到此畫面表示應用程式正常開啟了。
https://ithelp.ithome.com.tw/upload/images/20210929/20140481LU04o2WAtS.png
點擊Files>Open Heap Dump...>選到欲分析的hprof檔案(我拿上篇自動導出的auto.hprof文件示範,Day13-JDK堆內存快照工具-jmap(三)自動導出內存映像文件)
https://ithelp.ithome.com.tw/upload/images/20210929/20140481JaUG8XAoNM.png
接著它會問你要選擇以下哪個常見的報吿:

  • Leak Suspects Report:查找內存泄露、系統概覽
  • Component Report:分析一組對像是否存在疑似內存問題:重複字符串、空集合、終結器、弱引用等
  • Re-open previously run reports
    選擇第一個Leak Suspects Report
    https://ithelp.ithome.com.tw/upload/images/20210929/20140481MFEFC17lpQ.png
    概覽中可以看到最大的幾個對象佔比(Biggest Objects by Retained Sized),可以看到發生內存洩漏的可能
    因為我示範案例中建立的對象比較單純,故顯示的圖片一個物件的佔比佔了幾乎全部。若是實際的專案,則不會這麼簡單
    https://ithelp.ithome.com.tw/upload/images/20210929/2014048141fToWnTtR.png
    default_report下面有塊黃色的區塊,可以看到問題的嫌疑點在哪,點擊『see stacktrace』
    https://ithelp.ithome.com.tw/upload/images/20210929/20140481ytpk5Ln0WN.png

心得

透過這方式便能快速找到造成內存洩漏的問題了!使用這工具才不會在遇到OOM時就好像大海撈針的感覺~
mat工具還有多有用的訊息可以查看,在接下來會繼續介紹~


上一篇
Day13-JDK堆內存快照工具-jmap(三)自動導出內存映像文件
下一篇
Day15-hprof文件分析工具:mat(二)
系列文
展開JDK工具的30天應用之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言