注意:JVM 生成 Heap Dump 的时候,虚拟机是暂停一切服务的。如果是线上系统执行 Heap Dump 时需要注意
1.jmap -dump:format=b,file=D:\test\heap.hprof 6956
2.通过配置VM参数生成。选项"-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/temp/",所代表的含义就是当程序出现OutofMemory时,将会在相应的目录下生成一份dump文件。对比:考虑到生产环境中几乎不可能在线对其进行分析,大都是采用离线分析,因此使用jmap+MAT工具是最常见的组合。
MAT查找内存泄漏
对于MAT来说,其常规的查找内存泄漏的方式可以细分为如下三步:
1、找到当前 Activity,在 Histogram 中选择其 List Objects 中的 with incoming reference
2、选择当前的一个 Path to GC Roots/Merge to GC Roots 的 exclude All 弱软虚引用。
3、找到的泄漏对象在左下角下会有一个小圆圈。
MAT的关键使用细节
要全面掌握MAT的用法,必须要先了解 隐藏在 MAT 使用中的四大细节,如下所示:
1、善于使用 Regex 查找对应泄漏类。
2、使用 group by package 查找对应包下的具体类。
3、明白 with outgoing references 和 with incoming references 的区别。
with outgoing references:它引用了哪些对象。
with incoming references:哪些对象引用了它。
4、了解 Shallow Heap 和 Retained Heap 的区别。
Shallow Heap:表示对象自身占用的内存。
Retained Heap:对象自身占用的内存 + 对象引用的对象所占用的内存。
网友评论