Mat是分析java堆栈的利器,与jdk自带的工具比较,分析快,占用内存少,各种图形显示有利于定位问题。
但是在真正的线上环境内存配置都比较大,目前上午笔记本内存配置是4G,无法分析线上应用倒出的heapdump,线下的测试机有足够的内存确没有图形化的展示界面。我们可以使用线下linux机器分析heapdump,笔记本用于显示,是不需要太多内存的。
下文介绍在有较大内存linux环境下,比如线下的测试机器,使用命令行的形式分析堆栈,再将分析结果下载到笔记本电脑分析。
1.根据heapdump大小调整内存
分析dump与dump内部对象结构有关,可能需要的内存小于heapdump的大小,但是如果有足够的内存,建议分配大于dump文件20%大小的内存给mat,修改MemoryAnalyer.ini
Xmx=……
2.是否需要保存垃圾对象信息
有时查看堆栈信息会有unreachable的标记,表示是垃圾对象,在heapdump时也保存了下来,如果分析的时候需要这部分信息,需要在启动脚本ParseHeapDump.sh中加入:
-keep_unreachable_objects
3. 分析dump
很简单:
./ParseHeapDump.sh $HEAPDUMP
4. 分析结果
5. 下载到本地,使用mat打开
本地windows内存尽量大,分析时会快些。这里有个技巧:
我用Window7 旗舰,4G内存,mat Xmx设置为可以6G,分析了11G的Heapdump。
Done