原文地址:http://www.javatang.comphp
正如Thread Dump文件记录了当时JVM中线程运行的状况同样,Heap Dump记录了JVM中堆内存运行的状况。
能够经过如下几种方式生成Heap Dump文件:html
jmap 命令是JDK提供的用于生成堆内存信息的工具,能够执行下面的命令生成Heap Dump:java
jmap -dump:live,format=b,file=heap-dump.bin <pid>
其中的pid是JVM进程的id,heap-dump.bin
是生成的文件名称,在执行命令的目录下面。推荐此种方法。oracle
JConsole是JDK提供的一个基于GUI查看JVM系统信息的工具,既能够管理本地的JVM,也能够管理远程的JVM,能够经过下图的 dumpHeap
按钮生成 Heap Dump文件。eclipse
在JVM的配置参数中能够添加 -XX:+HeapDumpOnOutOfMemoryError
参数,当应用抛出 OutOfMemoryError 时自动生成dump文件;
在JVM的配置参数中添加 -Xrunhprof:head=site
参数,会生成java.hprof.txt 文件,不过这样会影响JVM的运行效率,不建议在生产环境中使用(未亲测)。工具
JVM Heap Dump文件可使用经常使用的分析工具以下:spa
jhat 是JDK自带的用于分析JVM Heap Dump文件的工具,使用下面的命令能够将堆文件的分析结果以HTML网页的形式进行展现:插件
jhat <heap-dump-file>
其中 heap-dump-file 是文件的路径和文件名,可使用 -J-Xmx512m
参数设置命令的内存大小。执行成功以后显示以下结果:线程
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.unix
这个时候访问 http://localhost:7000/ 就能够看到结果了。
Eclipse Memory Analyzer(MAT)是Eclipse提供的一款用于Heap Dump文件的工具,操做简单明了,下面将详细进行介绍。
IBM Heap Analyzer 是IBM公司推出的一款用于分析Heap Dump信息的工具,下载以后是一个jar文件,执行结果以下:
如前文所述,Eclipse Memory Analyzer(简称MAT)是一个功能丰富且操做简单的JVM Heap Dump分析工具,能够用来辅助发现内存泄漏减小内存占用。
使用 Memory Analyzer 来分析生产环境的 Java 堆转储文件,能够从数以百万计的对象中快速计算出对象的 Retained Size,查看是谁在阻止垃圾回收,并自动生成一个 Leak Suspect(内存泄露可疑点)报表。
Eclipse Memory Analyzer(MAT)支持两种安装方式,一是Eclipse插件的方式,另一个就是独立运行的方式,建议使用独立运行的方式。
在 http://www.eclipse.org/mat/downloads.php 下载安装MAT,启动以后打开 File - Open Heap Dump... 菜单,而后选择生成的Heap DUmp文件,选择 "Leak Suspects Report",而后点击 "Finish" 按钮。
第一次打开由于须要分析dump文件,因此须要等待一段时间进行分析,分析完成以后dump文件目录下面的文件信息以下:
上图中 heap-27311.bin 文件是原始的Heap Dump文件,zip文件是生成的html形式的报告文件。
打开以后,主界面以下所示:
接下来介绍界面中经常使用到的功能:
Overview视图,即概要界面,显示了概要的信息,并展现了MAT经常使用的一些功能。
直方图,能够查看每一个类的实例(即对象)的数量和大小。
支配树,列出Heap Dump中处于活跃状态中的最大的几个对象,默认按 retained size进行排序,所以很容易找到占用内存最多的对象。
MAT提供了一个对象查询语言(OQL),跟SQL语言相似,将类看成表、对象看成记录行、成员变量看成表中的字段。经过OQL能够方便快捷的查询一些须要的信息,是一个很是有用的工具。
此工具能够查看生成Heap Dump文件的时候线程的运行状况,用于线程的分析。
能够查看分析完成的HTML形式的报告,也能够打开已经产生的分析报告文件,子菜单项以下图所示:
经常使用的主要有Leak Suspects和Top Components两种报告:
提供了在分析过程当中用到的工具,一般都集成在了右键菜单中,在后面具体举例分析的时候会作详细的说明。以下图:
这里仅针对在 Overview 界面中的 Acations中列出的两项进行说明:
经过十六进制的地址查找对应的对象,见下图:
上面简单介绍了MAT工具的功能列表,下一篇文章将要经过实例详细进行分析。