Eclipse的Mat Plugin查找OOM使用一例

标签: eclipse mat plugin | 发表时间:2012-04-01 10:52 | 作者:liujian19790518
出处:http://blog.csdn.net

最近接手了一个老项目比较头痛。头痛的原因是这个代码的编写者已经离开了公司,而且代码基本没有注释,结构混乱并且还有严重的内存泄漏问题。其实接手这个项目最大需要解决的问题就是内存泄漏问题。由于这个老项目使用JDK1.5,所以像JDK1.6自带很多内存检测工具都派不上用场了。比如:jdk1.5 使用的jmap -heap 生成的dump文件用eclipse的mat就打不开。jdk1.5的jstat 不能看到live的对象。这就使查错的难度增加了不少。不过还好,通过更改测试服务器(read hat 5.0)上环境变量后,可以使用jmap -F -dump:format=b,file=dump.bin <pid> 来生成dump文件方便分析。所以如下就是分析内存泄漏的一个流程:

1.用jdk自带工具jmap追踪jvm的dump信息。见图

2.mat工具进行分析。如图

3.分析占用内存最多的类->方法->调用对象。如图

4.具体找到哪个对象占用内存较多。如图

5.OK,现在明了了,那么可以去找对应java代码了。如图

总结:

VelocityContext可能会导致内存泄漏(实际上是聚集了太多的内省信息)。原因是VelocityContext会堆积它所访问过的每个模板的内省信息,如果template缓存被关闭,将导致VelocityContext每次都访问一个新的模板,从而堆积更多的内省信息。

强烈建议做如下的事情:

·当template处理结束后创建一个新的VelocityContext,这将阻止堆积内省信息。如果你需要重用携带数据和对象的VelocityContext,可以简单的用另一个VelocityContext来包装它。外层的VelocityContext将会堆积内省的信息,但另人兴奋的是你将丢弃它!

·开启模板的缓存机制!这将阻止每次都对template重新解析,这样VelocityContext不仅可以避免增加内省信息,同时还可以改进程序。

·在循环迭代期间重用Template对象。这样,当缓存关闭的时候就不用强迫Velocity一次又一次的去重新读取和重新解析同样的template,因此,VelocityContext也就不会每次都堆积新的内省信息!

作者:liujian19790518 发表于2012-4-1 10:52:46 原文链接
阅读:3 评论:0 查看评论

相关 [eclipse mat plugin] 推荐:

Eclipse的Mat Plugin查找OOM使用一例

- - CSDN博客推荐文章
最近接手了一个老项目比较头痛. 头痛的原因是这个代码的编写者已经离开了公司,而且代码基本没有注释,结构混乱并且还有严重的内存泄漏问题. 其实接手这个项目最大需要解决的问题就是内存泄漏问题. 由于这个老项目使用JDK1.5,所以像JDK1.6自带很多内存检测工具都派不上用场了. 比如:jdk1.5 使用的jmap -heap 生成的dump文件用eclipse的mat就打不开.

你不知道的Eclipse的用法:使用MAT分析Android的内存

- - CSDN博客研发管理推荐文章
如果使用DDMS确实发现了我们程序中存在内存泄露,那如何定位到具体出现问题的代码片段,最终找到问题所在呢. 如果从头到尾分析代码逻辑,那肯定会把人逼疯,特别是在维护别人写的代码的时候. 这里介绍一个极好的内存分析工具Memory Analyzer Tool(MAT). 在Eclipse中安装和使用MAT步骤 .

Jenkins的plugin开发

- - CSDN博客研发管理推荐文章
       Jenkins强大的功能主要靠其丰富的plugin体现,之前的一篇博客《 Jenkins安装plugin》中介绍了如何找到并安装需要的plugin. 虽然目前已经有大量非常优秀的plugin可供使用,但是有时候仍需要自己开发一些满足项目特殊要求的plugin. 下面通过一个简单实例,介绍Jenkins的plugin的整个开发过程.

MAT使用入门

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

[原]jQuery ListBox Plugin(ListBox插件)

- We_Get - 博客园-首页原创精华区
转载请注明作者(think8848)和出处(http://think8848.cnblogs.com). 未经作者同意,请勿擅自修改本文内容. 这两天项目中要用到类似于ListBox的功能了,本以为有很多jQuery插件,没有想到的是,居然没有搜到好用的,咋办呢,自已动手丰衣足食吧,于是花了一个晚上的时间做出来一个,上效果图:.

JVM性能调试之mat

- - ITeye博客
mat为eclipse的一个内存分析插件,帮助查找内存泄漏和减少内存消耗. 首先基于jmap导出的堆信息. jmap导出参见另一则博客.  执行之后用jmap输出堆信息. 我们可以看到图形化展示:.  我们可以看到有很多的User对象.  这些对象有可能会溢出,然后我们打开OQL窗口看他是否为null,执行如下OQL语句.

MAT JVM内存分析

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

Eclipse 3.7发布

- Power - Solidot
Eclipse基金会宣布发布开源集成开发环境Eclipse 3.7,代号Indigo.

使用MAT分析内存泄露

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

Android性能专项测试之MAT

- - CSDN博客推荐文章
Android内存优化之二:MAT使用进阶. Android内存优化之一:MAT使用入门. MAT中的Bitmap图像. MAT工具全称为Memory Analyzer Tool,一款详细分析Java堆内存的工具,该工具非常强大,为了使用该工具,我们需要hprof文件,该文件我们在之前的 Heap Snapshot工具的时候,我们就生成了该文件.