在编写Java代码时,经常会遇到OOM内存溢出,遇到这种情况时,一般会使用开源OOM分析工具,来分析内存溢出时的dump文件,下面主要介绍几种监控工具的使用。
[b]一、IBM HeapAnalayzer[/b]
[b]工具的下载[/b]
该工具是一个独立的jar包,我们只需运行jar包,然后就会弹出该工具的使用界面。
访问网址[url]https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091[/url],然后点击链接“Download HeapAnalyzer”,就能下载到最新的IBM HeapAnalayzer。
[b]工具的运行[/b]
在运行该工具时,会有个比较恶心的问题,就是该工具在解析dump文件时,会遇到内存不足的问题。因此需要加载该jar包在运行时使用的内存:
首先,打开CMD命令
然后输入如下命令:
[b]工具的使用[/b]
为了测试工具,首先需要产生一个dump文件:
在Eclipse中创建一个Test类,然后写入如下代码:
然后,在Test类的运行命令中的Vm arguments输入框内,输入如下内容:
编辑完成后,如下图所示:
[img]http://dl.iteye.com/upload/attachment/0073/6776/805a9879-617a-392b-9265-7ab75c2eac11.jpg[/img]
然后,运行Test类,在桌面产生javaHeapDump.hprof文件。接着在双击IBMHeapAnalayzer监控工具,我这里的监控工具名称是ha437.jar,打开后,如下图所示:
[img]http://dl.iteye.com/upload/attachment/0073/6782/467a0bb7-8e06-3d63-82e7-7e7884e0c8af.jpg[/img]
请注意下图显示的部分:
[img]http://dl.iteye.com/upload/attachment/0073/6784/2b8ca377-bfd6-3c71-8f5a-3b7084f2ed1b.jpg[/img]
红色标注的地方显示,内存被占用99.19%,咱用内存的是一个ArrayList,且里面存放的是很多的Date对象。
当然该工具也提供了一个直接查看对象占用内存大小的功能,如图:
[img]http://dl.iteye.com/upload/attachment/0073/6786/c8e13bc7-42ef-35f7-8884-9447cd9ea69a.jpg[/img]
图中直接显示了Date对象占用了很多的内存,该功能使用非常方便。
[b]二、Memory Analyzer (MAT)[/b]
这个工具的详细用法,在IBM Developer Works论坛上有一篇很好的文章
[url]http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html[/url]
[url]http://coderj.org/blog/2011/08/02/use-mat-analysis-dump-file/[/url]
[b]工具的下载[/b]
该工具是Eclipse插件,也是用来解析dump文件。MAT主站地址为:[url]http://www.eclipse.org/mat/[/url]。首先输入网址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]。
[b]工具的运行[/b]
根据上一个工具中产生dump文件的方法,产生一个文件,然后直接将该文件拖入到Eclipse中即可。打开后,如下图所示:
[img]http://dl.iteye.com/upload/attachment/0073/6818/cf316c9d-ebca-30d8-b96d-43a76fa9d1bf.jpg[/img]
[b]工具的使用[/b]
打开MAT工具的首页后,点击[img]http://dl.iteye.com/upload/attachment/0073/6868/537c5afe-6e10-3425-96fd-3941a6138658.jpg[/img],会显示内存对象中所占的内存大小,如图:
[img]http://dl.iteye.com/upload/attachment/0073/6870/b9aa4128-4171-39a7-8d59-f0d72a3ea180.jpg[/img]
[b]一、IBM HeapAnalayzer[/b]
[b]工具的下载[/b]
该工具是一个独立的jar包,我们只需运行jar包,然后就会弹出该工具的使用界面。
访问网址[url]https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091[/url],然后点击链接“Download HeapAnalyzer”,就能下载到最新的IBM HeapAnalayzer。
[b]工具的运行[/b]
在运行该工具时,会有个比较恶心的问题,就是该工具在解析dump文件时,会遇到内存不足的问题。因此需要加载该jar包在运行时使用的内存:
首先,打开CMD命令
然后输入如下命令:
java -Xms512m -Xmx1024m -jar IBMHeapAnalayzer监控工具全名
[b]工具的使用[/b]
为了测试工具,首先需要产生一个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
编辑完成后,如下图所示:
[img]http://dl.iteye.com/upload/attachment/0073/6776/805a9879-617a-392b-9265-7ab75c2eac11.jpg[/img]
然后,运行Test类,在桌面产生javaHeapDump.hprof文件。接着在双击IBMHeapAnalayzer监控工具,我这里的监控工具名称是ha437.jar,打开后,如下图所示:
[img]http://dl.iteye.com/upload/attachment/0073/6782/467a0bb7-8e06-3d63-82e7-7e7884e0c8af.jpg[/img]
请注意下图显示的部分:
[img]http://dl.iteye.com/upload/attachment/0073/6784/2b8ca377-bfd6-3c71-8f5a-3b7084f2ed1b.jpg[/img]
红色标注的地方显示,内存被占用99.19%,咱用内存的是一个ArrayList,且里面存放的是很多的Date对象。
当然该工具也提供了一个直接查看对象占用内存大小的功能,如图:
[img]http://dl.iteye.com/upload/attachment/0073/6786/c8e13bc7-42ef-35f7-8884-9447cd9ea69a.jpg[/img]
图中直接显示了Date对象占用了很多的内存,该功能使用非常方便。
[b]二、Memory Analyzer (MAT)[/b]
这个工具的详细用法,在IBM Developer Works论坛上有一篇很好的文章
[url]http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html[/url]
[url]http://coderj.org/blog/2011/08/02/use-mat-analysis-dump-file/[/url]
[b]工具的下载[/b]
该工具是Eclipse插件,也是用来解析dump文件。MAT主站地址为:[url]http://www.eclipse.org/mat/[/url]。首先输入网址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]。
[b]工具的运行[/b]
根据上一个工具中产生dump文件的方法,产生一个文件,然后直接将该文件拖入到Eclipse中即可。打开后,如下图所示:
[img]http://dl.iteye.com/upload/attachment/0073/6818/cf316c9d-ebca-30d8-b96d-43a76fa9d1bf.jpg[/img]
[b]工具的使用[/b]
打开MAT工具的首页后,点击[img]http://dl.iteye.com/upload/attachment/0073/6868/537c5afe-6e10-3425-96fd-3941a6138658.jpg[/img],会显示内存对象中所占的内存大小,如图:
[img]http://dl.iteye.com/upload/attachment/0073/6870/b9aa4128-4171-39a7-8d59-f0d72a3ea180.jpg[/img]