星期三, 3月 19, 2014

[TOMCAT] 利用Eclipse Memory Analyzer 來分析heap dump file

記錄一下MAT的操作心得

如何取得java heap dump

請再catalina.sh啟動Java heap dump的設定
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/TOMCAT/logs/heap-$(date +%Y-%m%d-%H%M).dump"


-XX:+HeapDumpOnOutOfMemoryError 打開heap dump
-XX:HeapDumpPath heap dump要產生的路徑





***
Eclipse Memory Analyzer

MAT 是一個輔助使用者分析java應用程式的記憶體使用狀況的免費工具,提供單一的應用程式版本與Eclipse外掛版面,由於heap dump的檔案大小會很大,直接使用單一的mat,可避免Eclipse也吃掉太多本機的記憶體。

另外已上線的程式可透過jmap來要求執行中的JVM吐出heap data,不過會造成額外的系統負載。

MAT可至此連結下載:D http://eclipse.org/mat/

開始操作

選擇Leak Suspects Report來觀查leak的嫌疑物件


等待一段時間後,就可以看到Overview的結果,可以看到2.6GB佔了很大一個區塊。



Leak Hunter會列表出有問題的物件。


Dominator tree可以協助我們查看Class使用記憶體的狀況,並可以一層一層展開


結論
MAT只是一個分析工具,不代表就是真正的Memory Leak的原因,還是要透過程式的設計者來確認!!透過分析可以找到哪些class的實作方式是否不符合我們預期的系統行為。

***

參考資料
Eclipse Memory Analyzer (MAT) - Tutorial 
Automated Heap Dump Analysis: Finding Memory Leaks with One Click
[Java] Heap Dump Analysis with Memory Analyzer Tool
Eclipse Memory Analyzer, 10 useful tips/articles
Memory Analyzer Tool (MAT) 簡介

沒有留言:

張貼留言

留個話吧:)