内存泄露分析OutOfMemoryError-(Memory Analyzer Tool,MAT)

本文介绍如何使用MAT工具分析Java应用程序中的OutOfMemoryError错误。通过生成heap dump文件并利用MAT进行深入分析,找出内存泄漏的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家在开发J2EE应用时可能经常碰到OOM(OutOfMemoryError)的问题。出现这种问题的原因就是内存消耗殆尽,创建新的对象时没有可分配的内存了。OOM的原因,是Old区在FULL GC之后的剩余空间,仍然无法承载Young区要晋升的对象大小。本文是通过MAT工具进行分析。

首先我们要知道,MAT通过分析OOM后的Java heap dump文件,通过对dump文件的分析找到内存可能泄露的点。了解这个之后,我们首先需要生成dump文件,这里我可以编写一个小程序,如:

import java.util.ArrayList;
import java.util.List;

public class Test {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		// 10M的PermSize在integer范围内足够产生OOM了
		while (true) {
			list.add(new String("test"));
		}
	}
}

(一)dump文件生成

运行该程序时设置JVM的堆内存的极限值为5M(-Xmx5m),并加上-XX:+HeapDumpOnOutOfMemoryError此参数是帮助生成dump文件,程序启动后直到抛出OOM异常。异常抛出后,在程序的classpath下会生成以一个以.hprof结尾的文件,如:java_pid4504.hprof,这就是我们需要的dump文件。

-XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,如不设置,默认存储在jvm 运行环境目录。如:


②还有一种生存dump文件的方式是采用jmap获取,对于部署到服务器上的程序可以采用这种方式,生成后下载到本地分析。获取命令为:

jmap -dump:format=b,file=<dumpfile.hprof> <pid>  

(二)dump分析

现在dump文件有了,现在我们就可以使用MAT工具对该dump文件分析。首先需要下载安装MAT,安装有两种形式:

①直接下载绿色版本的MemoryAnalyzer(推荐使用,方便),下载地址(http://download.youkuaiyun.com/download/wwd0501/10136257http://www.eclipse.org/mat/downloads.php

②在eclipse中集成mat插件,集成方法自行搜索吧,文章一堆。

安装后,就可以使用软件分析dump文件了。打开MemoryAnalyzer--》open File



(三)MAT介绍

MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。

当服务器应用占用了过多内存的时候,会遇到OutOfMemoryError。如何快速定位问题呢?Eclipse MAT的出现使这个问题变得非常简单。它能够离线分析dump的文件数据。
    Eclipse MAT是SAP公司贡献的一个工具,可以在Eclipse网站下载到它,完全免费的。它可比Sun提供的内存镜像分析工具jhat要强太多了。

(四)类似内存分析工具

IBM heapAnalyzer


IBM heapAnalyzer简介以及使用


IBM heapAnalyzer下载地址:ftp://public.dhe.ibm.com/software/websphere/appserv/support/tools/HeapAnalyzer/ha456.jar




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东境物语

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

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

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

打赏作者

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

抵扣说明:

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

余额充值