内存泄露分析OutOfMemoryError-(Memory Analyzer Tool,MAT)
来源:互联网 发布:热力系统计算软件 编辑:程序博客网 时间:2024/06/05 09:37
大家在开发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.csdn.net/download/wwd0501/10136257,http://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
- 内存泄露分析OutOfMemoryError-(Memory Analyzer Tool,MAT)
- Eclipse Memory Analyzer tool(MAT)分析内存泄露(一)
- Eclipse Memory Analyzer tool(MAT)分析内存泄露(二)
- 利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露
- 利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- Android 5.0,6,0,7.0特性及其控件
- Mybatis异常解决之--org.apache.ibatis.binding.BindingException
- 使用开源PPssPP 在android环境中编译步骤
- Fiori2.0学习笔记-JSONModel
- jsp静态include和动态include的区别
- 内存泄露分析OutOfMemoryError-(Memory Analyzer Tool,MAT)
- 2017-8-21到2017-11-21
- Springboot-HelloWorld
- CString、String、Char*相互转换
- 糖油拌饭
- Python 学习过程
- Nginx访问PHP文件的File not found错误处理,两种情况
- 卷积神经网络(二)
- Cocoscreator-cc.Node