一、准备工作
分析较大的dump文件(根据我自己的经验2g以上的dump文件就需要使用以下介绍的方法,不然mat会出现oom)需要调整虚拟机参数
找个64位的系统在memoryanalyzer.ini设置-xmx2g
如果是32位的xp可以使用下面的方法进行尝试:
-vmd:/program files/java/jrockit-r28.0.0-jre1.6.0_17/bin/jrockit/jvm.dll-vmargs-xmx1700m
二、开始使用mat进行oom分析
第一步,启动mat ,选择file->open heap dump 选择你的dump文件。下面开始等待,mat解析dump文件需要花一些时间,在解析的同时会在硬盘上写入一些解析结果文件,这样下次打开时速度会快很多。有时候mat在解析过程中可能会出现出错的情况,这个时候可以将那些临时文件删除以后重试第一步,如果你的rp够好的话重试也许会解析成功。
第二步,查看内存泄漏分析报表。mat解析完成以后会出现如下图的提示:
因为我们就是为了查找内存泄漏的问题,所以保持默认选项直接点“finish”就可以。
mat会非常直观的展现内存泄漏的可疑点,类似下面的报表可以直接看到某个线程占用了大量的内存
问题的详细分析信息:
第三步,开始寻找导致内存泄漏的代码点。这时往往需要打开对象依赖关系树形视图,点击如图按钮即可。
这时会看到如下视图
这个视图的左边大区域可以看到对象的依赖关系,选中某个对象以后可以在左边小窗口查看对象的一些属性。如果属性的值是一些内存地址你还可以点击工具栏的搜索按钮来搜索具体的对象信息。在进行具体分析的时候mat只是起了帮助你进行分析的工具的功能,oom问题分析没有固定方法和准则。只能发挥你敏锐的洞察力,结合源代码,对内存中的对象进行分析从而找到代码中的bug.