使用IBM heapAnalyzer分析内存泄露的原因
来源:互联网 发布:票据打印的软件 编辑:程序博客网 时间:2024/05/22 14:50
大家在开发J2EE应用时可能经常碰到OOM的问题。出现这种问题的原因就是内存消耗殆尽,创建新的对象时没有可分配的内存了。为了找到真正导致OOM的原因,这里将使用IBM heapAnalyzer工具进行定位。
首先要知道,IBM heapAnalyzer是通过分析OOM后的Java heap dump文件的,通过对dump文件的分析找到内存可能泄露的点。了解这个之后,我们首先需要生成dump文件,这里我可以编写一个小程序,如:
public class Test { /** * @param args */ public static void main(String[] args) { List<String> list = new ArrayList<String>(); //10M的PermSize在integer范围内足够产生OOM了 int i = 0; while (true) { list.add(new String("test")); } }}运行该程序时设置JVM的堆内存的极限值为10M(-Xmx10m),并加上-XX:+HeapDumpOnOutOfMemoryError,此参数是帮助生成dump文件,程序启动后直到抛出OOM异常。异常抛出后,在程序的classpath下会生成以一个以.hprof结尾的文件,如:java_pid4504.hprof,这就是我们需要的dump文件。
dump文件有了,现在我们使用heapAnalyzer对该dump进行分析,首先需要安装heapAnalyzer,安装比较简单,只要下载下来直接解压即可,我这里使用的是ha414.jar,要求JDK1.6,设置JAVA_HOME后,通过命令后启动heapAnalyzer,如:java -jar ha414.jar。
HeapAnalyzer启动后的界面如下:
HeapAnalyzer启动后,通过菜单File->Open打开生成的dump文件java_pid4504.hprof。
dump文件加载后,通过菜单Analysis->Tree View展现出来。
通过dump信息分析内存泄漏的对象。主要思路是堆内存占用比例,比例越大说明堆内存消耗越多。
这个例子很简单,通过如下图很快就可定位出内存泄漏的地方。
这里可以看到java/util/ArrayList对象占用堆内容最大,达到93%。当然这里并不是说ArrayList存在问题,而是说ArrayList占用的堆内存较多,不正常,至于为啥会不正常,这还依赖于该对象所处的程序块相关,找到这点问题就解决一大半了。
最后需要在程序中找到使用该对象的地方,再分析程序,确定产生内存泄漏的原因。
原文地址:http://www.51testing.com/html/61/412661-241471.html
0 0
- 使用IBM heapAnalyzer分析内存泄露的原因
- 使用IBM heapAnalyzer分析内存泄露的原因
- 使用IBM heapAnalyzer分析内存泄露的原因
- IBM heapAnalyzer分析内存泄露
- IBM HeapAnalyzer简介使用
- 用 IBM HeapAnalyzer 和 MOD4J 分析 Java 内存泄漏
- IBM HeapAnalyzer和MOD4J分析Java内存泄漏
- 实例讲解:使用IBM heapAnalyzer分析heap dump文件步骤
- 实例讲解:使用IBM heapAnalyzer分析heap dump文件步骤 .
- 使用IBM heapAnalyzer分析heap dump文件步骤
- 内存泄露原因分析
- Android内存泄露分析之-内存泄露的原因
- Android中内存泄露的原因分析:
- JAVA内存泄露的原因分析
- 内存泄露的原因
- 内存泄露的原因
- 内存泄露的原因
- 内存泄露的原因
- java加密解密研究8、MAC算法家族
- 【BZOJ 1021】 [SHOI2008]Debt 循环的债务
- win8.1 环境下搭建PHP5.5.6+Apache2.4.7
- 24天学会设计模式---------中介者模式
- (推荐)高并发高流量网站架构详解
- 使用IBM heapAnalyzer分析内存泄露的原因
- Freescal 网站可以访问了,原来是公司网络问题,长城宽带已经修复
- mybatis通过association来封装自己的对象属性
- 2月3号总结
- HDU 5072 - Coprime(容斥原理+素筛)
- Uva 202 Repeating Decimals
- VS2010编译PostgreSQL 9.2.2
- 找回被转移的备份文件 delete expired ;catalog
- 2014--值得开心的事情