在编写Java代码时,经常会遇到OOM内存溢出,遇到这种情况时,一般会使用开源OOM分析工具,来分析内存溢出时的dump文件,下面主要介绍几种监控工具的使用。
一、IBM HeapAnalayzer
工具的下载
该工具是一个独立的jar包,我们只需运行jar包,然后就会弹出该工具的使用界面。
访问网址 https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091,然后点击链接“Download HeapAnalyzer”,就能下载到最新的IBM HeapAnalayzer。
工具的运行
在运行该工具时,会有个比较恶心的问题,就是该工具在解析dump文件时,会遇到内存不足的问题。因此需要加载该jar包在运行时使用的内存:
首先,打开CMD命令
然后输入如下命令:
工具的使用
为了测试工具,首先需要产生一个dump文件:
在Eclipse中创建一个Test类,然后写入如下代码:
然后,在Test类的运行命令中的Vm arguments输入框内,输入如下内容:
编辑完成后,如下图所示:
然后,运行Test类,在桌面产生javaHeapDump.hprof文件。接着在双击IBMHeapAnalayzer监控工具,我这里的监控工具名称是ha437.jar,打开后,如下图所示:
请注意下图显示的部分:
红色标注的地方显示,内存被占用99.19%,咱用内存的是一个ArrayList,且里面存放的是很多的Date对象。
当然该工具也提供了一个直接查看对象占用内存大小的功能,如图:
图中直接显示了Date对象占用了很多的内存,该功能使用非常方便。
二、Memory Analyzer (MAT)
这个工具的详细用法,在IBM Developer Works论坛上有一篇很好的文章
http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html
http://coderj.org/blog/2011/08/02/use-mat-analysis-dump-file/
工具的下载
该工具是Eclipse插件,也是用来解析dump文件。MAT主站地址为: http://www.eclipse.org/mat/。首先输入网址http://www.eclipse.org/mat/previousReleases.php,然后查看你自己的Eclipse版本,我的是Indigo的,所以点击链接“Previous Releases”,选择Indigo版本的URL[url]http://download.eclipse.org/mat/1.1.0/update-site/ [/url]。
工具的运行
根据上一个工具中产生dump文件的方法,产生一个文件,然后直接将该文件拖入到Eclipse中即可。打开后,如下图所示:
工具的使用
打开MAT工具的首页后,点击
,会显示内存对象中所占的内存大小,如图:
一、IBM HeapAnalayzer
工具的下载
该工具是一个独立的jar包,我们只需运行jar包,然后就会弹出该工具的使用界面。
访问网址 https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091,然后点击链接“Download HeapAnalyzer”,就能下载到最新的IBM HeapAnalayzer。
工具的运行
在运行该工具时,会有个比较恶心的问题,就是该工具在解析dump文件时,会遇到内存不足的问题。因此需要加载该jar包在运行时使用的内存:
首先,打开CMD命令
然后输入如下命令:
java -Xms512m -Xmx1024m -jar IBMHeapAnalayzer监控工具全名
工具的使用
为了测试工具,首先需要产生一个dump文件:
在Eclipse中创建一个Test类,然后写入如下代码:
package test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author zhengtian
*
* @date 2011-6-17 下午02:39:24
*/
@SuppressWarnings("all")
public class test {
public static void main(String[] args) {
List<Date> list = new ArrayList<Date>();
while (true) {
Date date = new Date();
list.add(date);
date = null;
}
}
}
然后,在Test类的运行命令中的Vm arguments输入框内,输入如下内容:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=C:\Users\Administrator\Desktop\javaHeapDump.hprof
编辑完成后,如下图所示:

然后,运行Test类,在桌面产生javaHeapDump.hprof文件。接着在双击IBMHeapAnalayzer监控工具,我这里的监控工具名称是ha437.jar,打开后,如下图所示:

请注意下图显示的部分:

红色标注的地方显示,内存被占用99.19%,咱用内存的是一个ArrayList,且里面存放的是很多的Date对象。
当然该工具也提供了一个直接查看对象占用内存大小的功能,如图:

图中直接显示了Date对象占用了很多的内存,该功能使用非常方便。
二、Memory Analyzer (MAT)
这个工具的详细用法,在IBM Developer Works论坛上有一篇很好的文章
http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html
http://coderj.org/blog/2011/08/02/use-mat-analysis-dump-file/
工具的下载
该工具是Eclipse插件,也是用来解析dump文件。MAT主站地址为: http://www.eclipse.org/mat/。首先输入网址http://www.eclipse.org/mat/previousReleases.php,然后查看你自己的Eclipse版本,我的是Indigo的,所以点击链接“Previous Releases”,选择Indigo版本的URL[url]http://download.eclipse.org/mat/1.1.0/update-site/ [/url]。
工具的运行
根据上一个工具中产生dump文件的方法,产生一个文件,然后直接将该文件拖入到Eclipse中即可。打开后,如下图所示:

工具的使用
打开MAT工具的首页后,点击

