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工具的安装以及应用,对后面的学习可能会有帮助。

猜你喜欢

转载自blog.csdn.net/feinifi/article/details/121377235
今日推荐