eclipse安装memory analyzer工具分析堆转储信息
Posted luffy5459
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eclipse安装memory analyzer工具分析堆转储信息相关的知识,希望对你有一定的参考价值。
Memory Analyzer Tools简称mat,eclipse上的安装,有两种办法,有一种直接在Help->Eclipse Marketplace,在弹出框里面,可以搜索memory,出来的工具里面就会有Memory Analyzer,点击install即可。这种方式有一个好处,就是不用关心mat与eclipse的版本对应关系。
还有一种安装方式,就是通过Help->Install New Software,在这个安装向导里面,需要指定mat下载地址,一般而言,我们需要到这个地址,https://download.eclipse.org/mat/ ,去查找合适的版本。默认可以采用:https://download.eclipse.org/mat/latest/update-site/。直接使用最新的版本。
以上,两种方式都可以安装mat。
下面通过一个简单的oom的示例,来演示如何使用mat来分析堆栈转储信息。
package com.xxx.huali.hualitest.jstackdemo;
import java.util.HashMap;
import java.util.Map;
public class OOMHeapTest {
public static void main(String[] args) {
oom();
}
public static void oom() {
Map<String, Person> map = new HashMap<String,Person>();
for(int i=0;i<1000000;i++) {
map.put(i+"_oom", new Person(i, "name"+i));
}
System.out.println(map.size());
}
}
class Person{
int id;
String name ;
public Person() {
}
public Person(int id,String name) {
this.id = id;
this.name = name;
}
}
在eclipse里面,点击Run As->Run Configurations->在虚拟机参数这里作一下限制,然后点击Run。
参数内容如下:
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError
运行,控制台会打印gc信息,最后报错退出。
如上图所示,因为内存溢出报错程序结束,产生的堆栈转储文件在项目目录下,文件名是java_pid10384.hprof。
在eclipse中,可以直接File->Open,选择堆栈转储文件。这时候,会弹出一个确认框,点击Finish即可。
主页视图是这样子的:
点击Leak Suspects链接,我们可以跳转到它的概览页面,这里就可以看到具体的报错位置:
这里对应代码的12行:
12行是往map中添加对象,这里不断申请新的对象,内存不够,最后报错。
mat工具,不仅可以打开hprof文件,还可以打开jmap命令生成的bin后缀的堆栈转储文件。
jmap命令如下:
huali@admin:~/java$ jmap -dump:live,format=b,file=problem.bin 8966
Dumping heap to /home/huali/java/problem.bin ...
Heap dump file created
huali@admin:~/java$ ls
Hello.class Hello.java problem.bin
其中,8966就是占用内存较高或者耗cpu的java进程ID。
通过今天的示例,展示了mat工具的安装以及应用,对后面的学习可能会有帮助。
以上是关于eclipse安装memory analyzer工具分析堆转储信息的主要内容,如果未能解决你的问题,请参考以下文章
MyEclipse安装Eclipse Memory Analyzer插件,并进行错误文件分析流程
eclipse安装memory analyzer工具分析堆转储信息
Java系列: 如何在Eclipse中安装Memory Analyzer插件
转:MyEclipse安装Eclipse Memory Analyzer插件,并进行错误文件分析流程