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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值