使用IBM heapAnalyzer分析内存泄露的原因
2012-07-03 14:05
148 查看
大家在开发J2EE应用时可能经常碰到OOM的问题。出现这种问题的原因就是内存消耗殆尽,创建新的对象时没有可分配的内存了。为了找到真正导致OOM的原因,这里将使用IBM heapAnalyzer工具进行定位。
首先要知道,IBM heapAnalyzer是通过分析OOM后的Java heap dump文件的,通过对dump文件的分析找到内存可能泄露的点。了解这个之后,我们首先需要生成dump文件,这里我可以编写一个小程序,如:
运行该程序时设置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/?uid-412661-action-viewspace-itemid-241471
首先要知道,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")); } } } |
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/?uid-412661-action-viewspace-itemid-241471
相关文章推荐
- 使用IBM heapAnalyzer分析内存泄露的原因
- 使用IBM heapAnalyzer分析内存泄露的原因
- IBM heapAnalyzer分析内存泄露
- 使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- ArrayList 与HashSet的比较,及应用反射读取properties配置文件中的数据进行实例化再调用,以及类加载器的使用;还有HashCode的分析,及导致内存泄露,内存溢出的原因之一
- Android 内存泄露原因及使用MAT工具分析
- Android 内存泄露原因及使用MAT工具分析
- 使用IBM heapAnalyzer分析heap dump文件步骤
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- 使用IBM heapAnalyzer分析heap dump文件步骤
- 实例讲解:使用IBM heapAnalyzer分析heap dump文件步骤
- 实例讲解:使用IBM heapAnalyzer分析heap dump文件步骤 .
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- 使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露
- 深度分析内存泄漏原因,使用MAT工具检测内存泄露和性能
- Android中使用Handler造成内存泄露的分析和解决
- Android中使用Handler造成内存泄露的分析和解决
- 使用jdk自带工具生成heapdump文件以及分析内存中的变量情况
- Android 中使用内存监测工具Heap,及内存分析工具 MAT