本地模拟内存溢出并分析Dump文件
java Dump文件分析
前言
dump文件是java虚拟机内存在某一时间点的快照文件,一般是.hprof文件,下面自己模拟一下本地内存溢出,生成dump文件,然后通过mat工具分析的过程。
配置虚拟机参数
要想本地模拟oom异常,那么建议将堆内存设置的小一点,那样容易触发
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录} -Xms20m -Xmx20m
- -XX:+HeapDumpOnOutOfMemoryError表示jvm发生oom异常时,自动生成dump文件,文件格式一般是:java_pid20804.hprof ,其中20804是java进程id
- -XX:HeapDumpPath=${目录},表示生成dump文件的目录,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof,此步骤实验出了点问题,暂时跳过
- -Xms:表示给jvm分配的初始化堆内存
- -Xmx:表示最大堆内存
模拟oom异常的程序
public class Test1 {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
while (true){
Person person = new Person();
person.setDate(new Date());
person.setAge(20);
person.setName("test");
personList.add(person);
}
}
}
很明显,一直创建Person对象,却又无法释放,很快就内存溢出了。
java.lang.OutOfMemoryError: GC overhead limit exceeded
Dumping heap to java_pid21892.hprof ...
Heap dump file created [33907612 bytes in 0.152 secs]
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at Test1.main(Test1.java:15)
生成的文件名称是java_pid21892.hprof,在项目的根目录下面,文件大小33.9M
MAT工具分析dump文件
预览
预览界面,能清楚的看到整个堆总内存18.7M,但是有18.3M的内存被一个类的对象占用了

功能介绍

Histogram柱状图:以class类的维度展示每个class类的实例存在的个数、 占用的 [Shallow内存] 和 [Retained内存] 大小,可以分别排序显示,从图中看到,Person类的实例占用内存最大,而它就是没有回收引起内存溢出的对象

Dominator Tree支配树:该视图以实例对象的维度展示当前堆内存中Retained Heap占用最大的对象,以及依赖这些对象存活的对象的树状结构

展开会展示下一层子节点,可以这么理解:父节点引用了子节点,子节点没有被回收,所以父节点也没法被回收
Thread Overview::可以看到线程栈/线程对象信息

把线程进行一个排序,同样能看到引起内存溢出的是最上面线程里面的Person对象
可以选择展示什么样的报告信息,我们最开始打开dump文件时,会弹出一个窗口让我们选择,如果选错了这里可以重新选择

这里的功能比较强大,主要用来分析GC引用关系,每个对象到GCRoot的引用,可以在柱状图或者支配树界面里选择可疑对象进行分析,比较常用的两个是:Path to GC ROOTS和Merge Shortest Paths to GC Roots,当然选中对象双击,也能进入到这样的界面

Group分组功能:在 Histogram视图 和 Domiantor Tree视图时可操作,即以什么样的维度展示

将分析报告以什么样的格式导出,可选的有html、csv、txt。便于在团队合作分析dump文件时,无需将庞大的dump文件拷贝过去,只需要生成以上格式的文件,就能很方便的转移。
总结
以上用作笔记,方便下次本人查阅为主。
本地模拟内存溢出并分析Dump文件的更多相关文章
- java OOM还在看log日志,兄弟你错的的很严重,正确方式是分析dump文件
目录 OOM异常--intsmaze 正确姿势dump文件分析--intsmaze 正确的姿势--intsmaze dump丢失打印--intsmaze 哪些内存溢出会产生dump文件--intsma ...
- (转)JVM各种内存溢出是否产生dump
对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件.但永久代内存溢出不明确是否会生成,今天来做一个实验: 永久代 ...
- 使用MAT(Memory Analyzer Tool)工具分析dump文件--转
原文地址:http://gao-xianglong.iteye.com/blog/2173140?utm_source=tuicool&utm_medium=referral 前言 生产环境中 ...
- express 内存溢出问题分析定位
一.现象 1. 如下报错 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 1: n ...
- JVM:Java常见内存溢出异常分析
转载自:http://www.importnew.com/14604.html Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆 ...
- [Java基础] 使用JMAP dump及分析dump文件
转载:http://blog.csdn.net/kevin_luan/article/details/8447896 http://liulinxia02.blog.163.com/blog/stat ...
- android 内存溢出问题分析
最近的项目中,内存一直再增长,但是不知道是什么问题,导致内存溢出,在网上看到了这么一篇关于内存分析与管理的文章,解决了部分问题,感觉这篇文 章还不错,就转帖到我的blog上了,希望对大家有所帮助. ...
- Java常见内存溢出异常分析(OutOfMemoryError)
原文转载自:http://my.oschina.net/sunchp/blog/369412 1.背景知识 1).JVM体系结构 2).JVM运行时数据区 JVM内存结构的相关可以参考: http:/ ...
- 记一次内存溢出的分析经历——thrift带给我的痛orz
说在前面的话 朋友,你经历过部署好的服务突然内存溢出吗? 你经历过没有看过Java虚拟机,来解决内存溢出的痛苦吗? 你经历过一个BUG,百思不得其解,头发一根一根脱落的烦恼吗? 我知道,你有过! 但是 ...
随机推荐
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 副本和视图
副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置. 视图是数据的一个别称或引用,通过该别称或引用亦便可访问.操作原有数据,但原有数据不会产生拷贝.如果我们 ...
- Ubuntu 12.10 安装vim出错
在Ubuntu 12.10中安装vim时出现了如下提示: 正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装.如果您用的是 unstable ...
- CF10D LCIS 最长公共上升子序列
题目描述 This problem differs from one which was on the online contest. The sequence a1,a2,...,an a_{1}, ...
- 3_08_MSSQL课程_Ado.Net_子查询
子查询 1.把一个查询结果作为一个表来使用,就是子查询. 2.把一个查询结果作为一个 表达式进行使用就是子查询. (分页Sql)
- Idea 隐藏不必要的文件或文件夹 eg:(.idea,.gitignore,*.iml)
在使用Idea的时候,有一些文件是不必要的,可以将他们隐藏起来 方法:打开File–>Settings–>Editor如图,在File Types 中的 Ignore files and ...
- Failed to read candidate component class
今天编程时遇到了Failed to read candidate component class 这个异常,查了好久终于发现了是因为jdk的版本不对,所以报了这个错.
- phpsduty安装SSL证书,apache不能启动,解决方案
最近给客户开发微信小程序,因为本人也不太懂服务器的安装,(大神勿喷),顾个人一直使用的集成环境,原来一直是客户提供主机什么的,都是我们和客户说一下需要什么环境啊,配置啊,之类的,这次首次自己动手. 废 ...
- 关于Java大整数是否是素数
题目描述 请编写程序,从键盘输入两个整数m,n,找出等于或大于m的前n个素数. 输入格式: 第一个整数为m,第二个整数为n:中间使用空格隔开.例如: 103 3 输出格式: 从小到大输出找到的等于或大 ...
- 前端学习 之 CSS(一)
一:什么是 CSS? ·CSS 指层叠样式表 (Cascading Style Sheets) ·样式定义如何显示 HTML 元素 ·样式通常存储在样式表中 ·把样式添加到 HTML 4.0 中,是为 ...
- CSS - 表格细线边框
通过 border-collapse: collapse cellpadding="0", cellspacing= "0" 实现 <!DOCTYPE h ...