使用MAT分析内存泄露

标签: 测试工具 | 发表时间:2011-12-22 14:51 | 作者:shenxiu
出处:http://qa.taobao.com

对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题。随着单机内存越来越大,应用heap也开得越来越大,动辄十几G的Dump也不足为奇了。要快速分析,快速定位问题就必须有给力的工具帮忙,下面我来介绍下常用内存分析工具。

内存分析工具

jmap

JDK自带的一个工具,是JVM Heap导出的必备工具。
jmap -dump:format=b,file=xxx.bin pid   pid是java程序pid
此命令会将虚拟机heap镜像导成文件。不过jmap也有直接分析功能:jmap –histo pid,如下图。优点是可以直接查看对象的大小和类型,缺点是无法查看详细的对象引用信息。

jhat

JDK自带的dump文件分析工具,会启动一个webserver,可以直接浏览对象大小、类型及对象引用信息。缺点是对于动辄几十G的dump文件力不从心,分析时间长而且web界面会因为对象太多而无响应或者OOM。
jhat  -J-mx512m -port <端口号:默认为7000> xxx.bin  -mx512m表示所用最大内存512m

MAT

Eclipse Memory Analyzer是一个非常好用的内存dump文件分析工具,我们可以利用它的Eclipse 插件轻松实现查看对象树、对象大小、生成报告,甚至自动化分析可能出现泄露的对象。关于MAT的使用介绍可以参考: http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html?ca=drs-。 文章中的例子是在windows平台下分析,对于非常大的dump文件就无能为力了。

Linux 下使用MAT
对于非常大的dump文件MAT同样有办法分析,有下面几个步骤:
Step 1:下载MAT的Stand-alone Eclipse RCP Applications,下载地址: http://www.eclipse.org/mat/downloads.php。在“Stand-alone Eclipse RCP Applications”中找到适合自己的版本。找一台足够大内存的linux机器,将MAT复制上去。

Step 2:进入mat所在目录,编辑MemoryAnalyzer.ini文件设置最大内存值比如-Xmx9g。

Step 3:执行./ParseHeapDump.sh xxxx.bin 来分析dump文件,MAT的分析速度还是很快的。最终得到以下文件。

Step 4:将分析得到的文件包括原dump文件下载回windows平台,打开eclipse插件使用菜单File–>Open Heap Dump打开dump文件即可查看到分析结果。

MAT中我们最常用的是Dominator Tree(List the biggest objects and what they keep alive.)功能来分析较大的objects以及他们之间的引用关系,确定一些对象为什么不会被gc。比如从下面两张图中就可以看出,在两个前后两次的dump文件中HConnectionManager$HConnectionImplementation对象越来越大,这里就有OOM的风险。

相关 [mat 分析 内存泄露] 推荐:

使用MAT分析内存泄露

- - Taobao QA Team
对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题. 随着单机内存越来越大,应用heap也开得越来越大,动辄十几G的Dump也不足为奇了. 要快速分析,快速定位问题就必须有给力的工具帮忙,下面我来介绍下常用内存分析工具. JDK自带的一个工具,是JVM Heap导出的必备工具.

Android 性能优化之使用MAT分析内存泄露问题

- - CSDN博客推荐文章
转载请注明本文出自xiaanming的博客( http://blog.csdn.net/xiaanming/article/details/42396507),请尊重他人的辛勤劳动成果,谢谢. 内存泄露就像一个定时炸弹,随时都有可能使我们的应用程序崩溃掉,所以作为一名Android开发人员,还是需要有分析内存泄露的能力,说道这里我们还是要说下什么是内存泄露,内存泄露是指有个引用指向一个不再被使用的对象,导致该对象不会被垃圾回收器回收.

MAT JVM内存分析

- - 开源软件 - ITeye博客
我们使用的是 Eclipse Memory Analyzer V0.8,Sun JDK 6. 和其他插件的安装非常类似,MAT 支持两种安装方式,一种是“单机版“的,也就是说用户不必安装 Eclipse IDE 环境,MAT 作为一个独立的 Eclipse RCP 应用运行;另一种是”集成版“的,也就是说 MAT 也可以作为 Eclipse IDE 的一部分,和现有的开发平台集成.

使用MAT对java内存分析

- - BlogJava-首页技术区
这是一篇阅读MAT helper的笔记. Heap dump是java进程在特定时间的一个内存快照. 通常在触发heap dump之前会进行一次full gc,这样dump出来的内容就包含的是被gc后的对象. dump文件包含的内容:. 1,全部的对象:类,域,原生值和引用;. 2,全部的类:classloader,类名,超类,静态域;.

比较隐蔽的内存泄露案例分析

- - 百度质量部 | 软件测试 | 测试技术 | 百度测试|QA
和大家分享一个笔者在真实项目中遇到的一个内存泄露真实案例.. 真实项目中的一个待测模块,这里简化一下,整体可以看做是:输入—中间处理–输出模式,如下图1-1. 图1-1 待测模块整体框图. 其中中间处理与模块业务相关,这里我们可以暂时看做黑盒,不必关心. A. 用valgrind跑程序报警图如下1-2,但是报警所指的地方,研发者坚持认为已经释放,是valgrind误报.

关于类加载器内存泄露的分析

- - ITeye博客
从上个世纪90年代Java诞生之日起,Java的类和资源的加载就一直是个问题. 由于它增加了启动和初始化时间,因此这个问题在Java应用服务器上则尤为明显. 为了缓解这个问题,大家试过了不同的访问,比如说以exploaded方式部署,但这只对简单的应用有效;还有2001年发明的Java热插拔的机制.

Java常见问题分析(内存溢出、内存泄露、线程阻塞等)

- - Java - 编程语言 - ITeye博客
Java垃圾回收机制(GC) . 堆内存3代分布(年轻代、老年代、持久代) . ML(内存泄露) OOM(内存溢出)问题现象及分析 . IBM DUMP分析工具使用介绍. Java应用CPU、线程问题分析. Java垃圾回收机制(GC). 1.GC机制作用 . 1.1 JVM自动检测和释放不再使用的对象内存 .

一次大量 JVM Native 内存泄露的排查分析(64M 问题)

- - 掘金后端本月最热
我们有一个线上的项目,刚启动完就占用了使用 top 命令查看 RES 占用了超过 1.5G,这明显不合理,于是进行了一些分析找到了根本的原因,下面是完整的分析过程,希望对你有所帮助. Linux 经典的 64M 内存问题. 堆内存分析、Native 内存分析的基本套路. tcmalloc、jemalloc 在 native 内存分析中的使用.

使用Memory Analyzer tool(MAT)分析内存泄漏

- - 移动开发 - ITeye博客
前言的前言:本文是自2005年8月以来,首次在一个月之内发布三篇文章. 谨以此文献给这么多年始终不济的我. 北漂快两年了,何时能回到故乡,回去后又会怎样,也许永远是个未知……. 在平时工作过程中,有时会遇到OutOfMemoryError,我们知道遇到Error一般表明程序存在着严重问题,可能是灾难性的.

使用MAT(Memory Analyzer Tool)工具分析dump文件

- -
《使用MAT(Memory Analyzer Tool)工具分析dump文件》. 生产环境中,尤其是吃大内存的JVM,一旦出现内存泄露等问题是非常容易引发OutofMemory的,如果没有一个好的工具提供给开发人员定位问题和分析问题,那么这将会是一场 噩梦. 目前JDK其实自带有一些内存泄露分析工具专门用于帮助开发人员定位内存泄露等问题,但是这些工具往往并不是能够满足一些现状,这里笔者所指的现状更多是迅速、便捷、高效的定位出问题,方便开发人员迅速进行调整.