导出JVM的快照文件,并使用MAT打开分析


最近在学习JVM的工作原理,这是高级工程师必学的知识,书放了好久,现在终于鼓起勇气看完了基础部分。

MAT(Memory Analyzer tool)是分析JVM内存使用情况的工具,可以对线上的项目导出dump快照文件,真实的项目一般都是在Linux服务器上运行,而命令行式的分析难免费劲,这是可以通过导出的dump文件导出后,在可视化的界面进行分析。使用eclipse安装mat的过程可以参考:eclipse安装Eclipse Memory Analyzer插件

下面记录一下,如何使用MAT时怎么使用的,具体的使用过程不太好写,自己也在不断的学习过程中,不敢多说,下面仅记录一下其中的两个过程以备忘:

  • 导出项目的快照dump文件
  • 使用mat打开dump文件
  1. 导入项目的快照dump文件

可以通过两种方式导出dump文件,参数设置方式和命令方式。

参数方式导出

我们可以在项目出现OutOfMemory错误的时候让系统自动执行导出dump文件的过程,这是需要设置两个参数

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\proj.bin

这样在出现内存溢出的时候系统就可以自动导出这个文件,这个文件一般都非常大。

也可以使用-XX:+HeapDumpOnCtrlBreak参数,使用ctrl+break快捷键导出,或在Linux通过kill -3 pid 吓唬jvm也能导出dump文件。

命令方式导出

上面的方法只适用于项目出现明显异常的情况,如果我们想在系统“正常”运行的过程中导出dump快照,我们可以使用命令的方式,使用jmap就可以完成。

jmap -dump:live,format=b,file=d:\proj.bin Pid 导出文件

其中参数”format=b”是固定写法,意为导出的是二进制文件。 Pid是java进程id,可以使用jps查看得到。

导入快照dump文件

导入过程非常简单,正因为简单,似乎网上很少有这方面的描述,导致不知从哪里下手。

将我们得到的dump文件通过eclipse打开即可,即使用file-open file的步骤即可打开,甚至直接拖动到eclipse中也可以打开。在这里就可以对可能泄露的文件进行分析了,甚至可以通过它找到GC Roots的引用链,效果还是非常不错的。还在研究,有新奇的发现再来补充吧。

微信截图_20170301172931

 


分享到:

发表评论

昵称

抢个沙发呗~~~