MAT:Memory Analyzer Tool
是一個快速並且功能強大的 java heap 分析器,能分析查找內存泄漏等問題
獲取內存快照存儲的dump文件,就可以利用它來分析
下載地址:http://www.eclipse.org/mat/downloads.php
基本概念:
Shallow Size:對象自身佔用的內存大小
Retained Size:當前對象大小+它直接/間接引用到的對象大小,兩者之和
通過MAT分析由於代碼原因造成的內存泄漏:
-----獲取內存快照(.hprof文件):
方法1:在tomcat/bin/catalina.sh中設置,以便jvm崩潰的時候會打印出堆信息:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=path_address
方法2:使用命令jps、jmap獲取內存快照
jps -m -l 列出JVM中運行的進程狀態信息(獲取某個進程的pid, 供後續命令使用)
jmap -dump:format=b,file=xxx.hprof pid 把進程內存使用情況dump到文件中
jmap -dump:live,format=b,file=xxx.hprof pid 統計存活的對象信息
方法3:使用jconsole、jvisualVM也能獲取
-----使用MAT工具分析:
新建一個文件夾(因爲分析的時候會產生很多臨時文件),把要分析的.hprof文件放進來
打開MAT,選擇要分析的.hprof文件
分析的時候,根據MAT給出的提示一步步進行即可
注意事項:
因爲內存快照是某一瞬間的,所以可能需要多捕獲幾次,多次分析,才能發現問題
分析以後會生成一個壓縮包,如果看不懂的話,可以直接給開發人員進行分析