使用 eclipse memory analyzer 分析dump文件

1、首先在eclipse中安装应用,我的版本是4.6.3

2、点击eclipse help-->markerplace在find输入memory第一个就是所要找的插件,如下图所示。安装完毕会自动重启


3、安装完成,可以使用jmap从其他平台上生成dump文件信息,jmap的命令如下

#jps   --查找进程号
#jmap -dump:format=b,file=文件名 [pid]   --生成的dump文件以.hprof结尾,如 dump.hprof

测试:本例使用eclipse生成,测试内存溢出,实例代码如下:

public class DumpTest {
	public void init() {
		List<Person> list = new ArrayList<>();
		while (1 < 2) {
			int i = 0;
			Person person = new Person(i++, i + "zhansan");
			list.add(person);
		}
	}
	public static void main(String[] args) {
		DumpTest dumpTest = new DumpTest();
		dumpTest.init();
	}
}

点击右键运行 Run as--->run configuration  在arguments的vm arguments中填入参数如下:


具体参数如下:

-xms:初始内存,-Xmx:JVM最大可用内存,-xmn年轻代大小,-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集,-XX:+HeapDumpOnOutOfMemoryError在堆内存溢出是保存快照,-xx:heapDumpPath设置快照的路径,具体设置如下,设置完毕点击运行

-server -Xms1024m -Xmx1024m -Xmn384m -XX:+UseParallelOldGC  -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:/Desktop/dump/dump2.hprof


4、分析dump文件。点击eclipse的file---->open file 找到指定生成的hprof文件位置打开,生成下图报表


点击leak suspects可以查看疑似内存泄漏的地方,点击detail可以看到分析出ArryList 存放对象Person出了问题。



也可以在overview中点击dominator_tree查看堆占比,可以看出一个线程占比过高,集合中对象的数量过多。



 

猜你喜欢

转载自blog.csdn.net/zhangkang65/article/details/79351069