(1)MAT(MemoryAnalyzer)下载安装
下载地址
:https://www.eclipse.org/mat/downloads.php
(2)获取Dump文件
获取dump文件的集中方式:
- 手动使用jmap命令获取dump文件
jmap -dump:format=b,file=heap.hprof PID
- 自动(触发条件需要Java应用发生内存溢出)
Java应用启动参数加上以下参数:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
(3)打开dump文件
(4)使用方式
上图中圈中的是会经常使用到的:
- Histogram,可以列出内存中的对象,对象的个数及其大小。
列名详解:
Class Name:类名称,java类名
Objects:类的对象的数量,这个对象被创建了多少个
Shallow Heap:一个对象内存的消耗大小,不包含对其他对象的引用
Retained Heap:是shallow Heap的总和,即该对象被GC之后所能回收到内存的总和
从上图中我们可以清晰的观察到,不通的类对应的数量、占用内存、能回收到的内存等信息。可以选中对应的类鼠标右键进行对应的操作,可以查看更详细的信息:
右击类名--->List Objects--->with incoming references--->列出该类的实例
右击Java对象名--->Merge Shortest Paths to GC Roots--->exclude all ...--->找到GC
Root以及原因
- Leak Suspects,查找并分析内存泄漏的可能原因
Reports--->Leak Suspects--->Details
- Top Consumers,列出大对象