MAT内存问题分析定位

MAT内存问题分析定位

1、下载安装MemoryAnalyzer工具。

2、使用DDMS将对应线程的内存日志导出来后,使用hprof-conv工具进行转换,用MAT打开转换后的hprof文件。

 

Biggest object by retained size:以饼状图列出系统中占用最大资源的对象;

Histogram:以直方图的形式列出每个实例的详细信息;

Dominator Tree:列出最大和保持其存活的对象;

Top Consumers:显示出最耗资源的对象信息;

Duplicate Classes:显示重复类信息;

Leak Suspects:内存泄露嫌疑对象;

3、进入Histogram,选中一个对象右键,list object->with outgoing reference,查看当前对象所引用的外部对象;list object->with incoming reference,查看当前对象被哪些外部对象引用。

 

 

4、可以通过Merge Shortest Paths to GC Roots-> exclue all phantom/weak/soft etc. reference 找出某个实例没有被释放的原因。

 

5、进入Leak Suspects中,查看内存泄露可疑处。

 

6、Histogram比对

         为查找内存泄漏,通常需要两个 Dump结果作对比;打开 Navigator History面板,打开两个hprof文件,分别进入histogram,打开Navigation,分别将两个表的 Histogram结果都添加到Compare Basket中去 :

 

添加好后,打开Compare Basket面板,得到结果:

 

点击右上角!按钮,将得到比对结果:

 

将比对结果进行排序:

 

通过多次操作被测应用,将前后操作的hprof文件导出进行比对,找出对象引用的差异来定位问题。

 

猜你喜欢

转载自blog.csdn.net/kerryruan/article/details/79741593