java模拟内存溢出并分析_本地模拟内存溢出并分析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 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文件拷贝过去,只需要生成以上格式的文件,就能很方便的转移。
总结
以上用作笔记,方便下次本人查阅为主。
java模拟内存溢出并分析_本地模拟内存溢出并分析Dump文件相关推荐
- IBM内存分析工具JCA在windows环境下打开dump文件报错问题:Cannot find any thread dumps
问题描述:IBM内存分析工具JCA在windows环境下打开dump文件报错问题:Cannot find any thread dumps 原因:dump文件编码格式问题 解决:修改dump.txt文 ...
- jmap 文件解析_干货分享丨jvm系列:dump文件深度分析
摘要:java内存dump是jvm运行时内存的一份快照,利用它可以分析是否存在内存浪费,可以检查内存管理是否合理,当发生OOM的时候,可以找出问题的原因.那么dump文件的内容是什么样的呢? JVM ...
- 直接内存与元空间_深入浅出 JVM 内存管理
Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗? 可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪些GC算法 以及年轻代和老年代各自特点等等.1 ...
- python电视剧口碑分析_小案例(七):口碑分析(python)
微信公众号:机器学习养成记 搜索添加微信公众号:chenchenwings <菜鸟侦探挑战数学分析>小案例,python实现第七弹 案件回顾 商业街口碑分析 1,顾客在网络上会发表对商品或 ...
- 小红书用户画像分析_用户画像,该怎么分析?
有同学问:陈老师,我领导让我做用户画像分析,可是我做了一大堆数据,却被批:也没分析什么东西啊?该咋办?今天系统解答一下. 用户画像分析的错误姿势1.限于数据,动不敢动.一提用户画像,很多人脑海里立刻蹦 ...
- python 生存分析_用python教程进行生存分析何时何地
python 生存分析 机器学习 , 编程 , 统计 (Machine Learning, Programming, Statistics) Author(s): Pratik Shukla 作者:P ...
- 8g内存学习计算机专业够吗,现在电脑内存一般多大_现在电脑内存8个g够吗
2016-12-13 13:45:12 现在主流的配置是1G,512M的也很多.电脑主板上一般都有两个内存插槽,也就是可以同时插两个内存条.一般的主板最大支持2G到4G的最大内存.超过这个数量,主板是 ...
- 电商 竞品分析_电商平台竞品分析报告.docx
Planning scheme 电商平台竞品分析报告 电商平台竞品分析报告 电商平台竞品分析报告 V1.0 2018-3-18 状态 : [ √ ] 草稿 [ ] 修改中 [ ] 定稿 文件标签: 竞 ...
- 16g电脑内存有什么好处_电脑16g内存和8g内存区别多大
展开全部 16g内存和8g内存的一般情况下差别不大,特殊使用场景下有着较大差距,32313133353236313431303231363533e78988e69d8331333433626561具体 ...
最新文章
- c语言实现数码管显示qq号,各位大神,如何用C语言实现在数码管上实现1234同时亮...
- 每日一皮:单身狗的悲哀...
- 设计模式---读书笔记
- Outlook通过RPC/RPC Over HTTPS访问Exchange邮箱
- nodejs连接redis,redis服务器的地址格式应该怎么写
- win7重装系统后设置Python2.7环境
- Win7system登录打开计算机,Windows7系统system文件丢失导致开机黑屏如何解决
- java多张图片合成一张_1分钟学会“全景照片”拍摄技巧,从单反拍摄到PS合成,收藏备用...
- 红橙Darren视频笔记 自己捕获异常并保存到本地
- php项目电影院售票管理系统,电影院售票管理系统
- [转]抛弃jQuery,使用原生JavaScript
- ce修改面板属性_鬼谷八荒ce教程 教你如何修改属性+灵石+物品+时间等方法
- pdf 编辑器 linux
- 计算机CPU的时钟频率主要,cpu时钟频率计算公式_CPU频率计算方法详解
- 最新版校园招聘进大厂系列----------(2)美团篇 -----未完待续
- 使用QT+webassembly构建在线报表设计器
- Hadoop 中的面试题
- Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice
- 网站html漂浮代码大全,网页漂浮窗口代码
- 微信小程序--解密用户信息