构建一个简单的Springboot应用,模拟出OOM场景,再导出heap dump文件,通过Mat分析。

搭建简易Springboot,模拟OOM场景

搭建一个简易的springboot工程,在controller层循环添加对象,直至OOM。

//循环添加对象,模拟OOM

List userVoListNew = new ArrayList<>();

for (int i = 0; i < 1024 * 1024 * 1024; i++) {

userVoListNew.addAll(userVoList);

}

复制代码

具体代码地址,只要本地启动mysql、redis就跑起来了(一般半支烟直接docker启动,方便快捷):gitee.com/yclxiao/blo…

设置idea & 导出dump文件

1、配置idea的 VM options

在VM options中设置最大内存,以及设置dump文件位置

-Xmx512m

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/Users/yclxiao/Desktop/java_error_in_idea.hprof

复制代码

2、启动项目

启动项目,swagger调用userController方法,等待OOM出现。最后会在配置的位置上出现java_error_in_idea.hprof文件。

Mat分析dump文件

安装Memory Analyzer

下载地址:www.eclipse.org/mat/downloa…

导入dump文件

导入dump文件时,可能碰到以下错误:

An internal error occurred during: "Parsing heap dump from '/Users/yclxiao/Desktop/heapdump-1586847376115.hprof'".

Java heap space

复制代码

解决方式:修改Applications/mat.app/Contents/Eclipse/MemoryAnalyzer.ini中的最大内存配置

注意:半支烟是mac平台,window平台的文件位置稍微区别,小伙伴们自行查找下,哈哈!

分析dump文件

1、Mat分析概况

导出的dump文件大概400多M,通过MAT分析后,会看到一个饼状图,显示了排名靠前的大对象

2、点击Dominator Tree & Leak Suspects

点击Dominator Tree可以列出最大对象的排名,以及他们持有了哪些对象。点击Leak Suspects可以看到比较有嫌疑的泄露以及系统概述。

3、点击Dominator Tree

可看到最大的Object[],左边显示了他持有的对象,根据这个UserVo我们大概能排查到具体的代码位置。

4、点击Leak Suspects

能大概看到是哪个线程的请求、看到是哪个大对象、看到是哪个具体业务代码,也有堆栈信息,一般根据这些信息能很快定位到有问题的业务代码。

总结

​本文介绍了常见的分析OOM的方法。如果碰到线上问题先稳住不要慌,,第一时间保留线程(设置好OOM的dump位置),然后重启服务,再用Mat工具分析问题。

​当然啦,问题也可能出现在别的地方,半支烟碰到问题一般是top、df、free这3个命令跑一遍,先看下机器的CPU、硬盘、内存等情况,再做后续分析。

​如果更多好建议,欢迎与我交流。

原文链接

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[模拟内存溢出&通过MAT分析]http://www.zyiz.net/tech/detail-126873.html

java模拟内存溢出并分析_模拟内存溢出通过MAT分析相关推荐

  1. 内存泄漏分析_调查内存泄漏第2部分–分析问题

    内存泄漏分析 这个小型系列的第一个博客介绍了如何创建一个非常泄漏的示例应用程序,以便我们可以研究解决服务器应用程序上基于堆的问题的技术. 它展示了Producer-Consumer模式的一个大问题,即 ...

  2. 16g电脑内存有什么好处_电脑内存4G/8G/16G有什么区别?

    你到底需要多大内存? 很多老DIY玩家或许还依稀记得,在DDR2时代(大概2007年左右),2GB和4GB内存的游戏性能相差并不大,所以在当时很长一段时间内,看上去很美的4G容量往往会被扣上华而不实的 ...

  3. 字符内存转成字符串_字符串内存内部

    字符内存转成字符串 本文基于我对StackOverflow的回答 . 我正在尝试解释String类如何存储文本,内部存储和常量池如何工作. 这里要理解的要点是String Java对象与其内容– pr ...

  4. python电视剧口碑分析_小案例(七):口碑分析(python)

    微信公众号:机器学习养成记 搜索添加微信公众号:chenchenwings <菜鸟侦探挑战数学分析>小案例,python实现第七弹 案件回顾 商业街口碑分析 1,顾客在网络上会发表对商品或 ...

  5. 小红书用户画像分析_用户画像,该怎么分析?

    有同学问:陈老师,我领导让我做用户画像分析,可是我做了一大堆数据,却被批:也没分析什么东西啊?该咋办?今天系统解答一下. 用户画像分析的错误姿势1.限于数据,动不敢动.一提用户画像,很多人脑海里立刻蹦 ...

  6. python 生存分析_用python教程进行生存分析何时何地

    python 生存分析 机器学习 , 编程 , 统计 (Machine Learning, Programming, Statistics) Author(s): Pratik Shukla 作者:P ...

  7. 电商 竞品分析_电商平台竞品分析报告.docx

    Planning scheme 电商平台竞品分析报告 电商平台竞品分析报告 电商平台竞品分析报告 V1.0 2018-3-18 状态 : [ √ ] 草稿 [ ] 修改中 [ ] 定稿 文件标签: 竞 ...

  8. python微博评论情感分析_基于Python的微博情感分析系统设计

    2019 年第 6 期 信息与电脑 China Computer & Communication 软件开发与应用 基于 Python 的微博情感分析系统设计 王 欣 周文龙 (武汉工程大学邮电 ...

  9. 什么叫pmt测试分析_使用OriginLab进行PMT能谱分析

    PMT的能谱分析主要涉及两个方面,一方面是对ADC的采样值进行分析确认ADC采样正确.另一方面是对ADC的采样值进行积分,针对此积分值进行分析,即所谓的PMT能谱分析.能谱分析以及ADC采样处理分析必 ...

最新文章

  1. 机器人产业一定有美好未来
  2. 寻找冬日里的流量美食,发现了李子柒走红的秘密
  3. css 块元素、内联元素、内联块元素
  4. java异常处理机制_Java编程中的异常机制
  5. 【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!
  6. Neuron:空间注意中的Alpha同步和神经反馈控制
  7. java8新特性-过滤
  8. vscode下载C/C++手动下载 VSIX安装
  9. 如何写H5/web前端工程简历中的项目经验
  10. 使用python处理视频文件,提取关键帧并保存【已调通】
  11. 在Linux上安装centos 7镜像详细步骤
  12. 夏天计算机自动关机,电脑频繁自动关机,原因可能出在这
  13. 架构师修炼系列【业务高可用】
  14. 中国大学生计算机设计大赛英语,中国大学生计算机设计大赛
  15. [HSI论文阅读] | SSRN:Spectral-Spatial residual network for HSI classification
  16. 最近一直在准备PMP证书考试,停更!
  17. 智能网联汽车风险评估方法EVITA
  18. samba共享盘简单配置共享空间
  19. 2.0 案例2:爬取房源信息以及分析房价
  20. 关于在微软学生资源中心下载软件

热门文章

  1. 用python生成的猜数字游戏
  2. nginx启动重启与升级以及检测配置文件
  3. Cisco访问控制列表
  4. Shell脚本学习-阶段二十八-shell练习二
  5. Android view 小总结
  6. 数字后端基本概念介绍<Endcap Cell>
  7. 全球域名商解析新增量18强:万网易名位居三甲
  8. Linux 下用yum安装mysql
  9. RedHat Linux 7安装CentOS 7 yum源
  10. PreparedStatement设置时间