1 测试类准备
http://download.csdn.net/detail/xieyuntestshow/4255608
http://download.csdn.net/detail/xieyuntestshow/4255612
1 设置JVM 参数
首先需要设置了如下所示的 JVM 参数:
-XX:+HeapDumpOnOutOfMemoryError
JVM 就会在发生内存泄露时抓拍下当时的内存状态,也就是我们想要的堆转储文件。
如果你不想等到发生崩溃性的错误时才获得堆转储文件,也可以通过设置如下 JVM 参数来按需获取堆转储文件。
-XX:+HeapDumpOnCtrlBreak
除此之外,还有很多的工具,例如 JMap,JConsole 都可以帮助我们得到一个堆转储文件。本文实例就是使用JMap 直接获取了 Eclipse Galileo 进程的堆转储文件。您可以使用如下命令:
JMap -dump:format=b,file=<dumpfile> <pid>
jmap -dump:format=b,file=HeapDump.hprof/path/to/bin/java core_dump_file
Via Tools:
* Sun(Linux, Solaris; not on Windows) JMap Java 5: jmap-heap:format=b <pid>
* Sun (Linux, Solaris; Windows see link) JMap Java 6: jmap.exe -dump:format=b,file=HeapDump.hprof <pid>
* Sun (Linus, Solaris) JMap withCore Dump File: jmap -dump:format=b,file=HeapDump.hprof/path/to/bin/java core_dump_file
* Sun JConsole: Launch jconsole.exe and invoke operationdumpHeap() on HotSpotDiagnostic MBean
* SAP JVMMon: Launch jvmmon.exe and call menu for dumping theheap
不过,您需要了解到,不同厂家的 JVM 所生成的堆转储文件在数据存储格式以及数据存储内容上有很多区别, MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件。但是比较主流的厂家和格式,例如 Sun, HP, SAP 所采用的HPROF 二进制堆存储文件,以及 IBM 的 PHD 堆存储文件等都能被很好的解析(您需要安装额外的插件,请参考相关说明,本文不作详细解释)。
万事俱备,接下来,我们就可以开始体验一键式的堆存储分析功能了。