dump文件分析OOM及线程堆栈

OutOfMemoryError (OOM)

如果项目报错: OutOfMemoryError: Java heap space,说明堆内存空间(Heap Space)中没有足够的空间来分配对象了。
一旦发生 OOM,系统有可能不可用,或者频繁重启。属于非常严重的问题。

OOM 的解决方法一:

比较简单粗暴的一种做法,是增大堆内存空间。
在 项目启动时,调大 -Xms 和 -Xmx 。
-Xms 参数用于设置JVM的初始堆内存大小,而-Xmx参数用于设置JVM的最大堆内存大小。

-Xms1024m  -Xmx2048m

OOM 的解决方法二:

-Xms 和 -Xmx 哪怕调大了,如果没有找到根本的原因,大对象不断创建,不断地占用堆内存空间,还是有可能会继续 OOM。

可以设置在发生 OOM 时自动 dump 文件,保存到指定的文件。
dump文件是进程的内存镜像,可以通过分析 dump 文件,找到导致 OOM 的代码。

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof

oom 代码示例:

不断循环,不断创建对象,占用堆内存空间,模拟 OOM 的场景。

public class OomTest {public static void main(String[] args)  {createObject();}/*** 不断循环,不断创建对象,模拟 OOM 的场景**/public static void createObject()  {List<OomObject> oomList =new ArrayList<>();while (true) {OomObject oomObject = new OomObject();oomList.add(oomObject);}}}

添加 jvm 相关启动参数( Vm option ) :

  • 点击 Edit Configurations:
    在这里插入图片描述

  • 点击 Modify options, 选择 Add Vm Options :

在这里插入图片描述

启动参数( Vm option ) 如下:

添加启动参数,设置最大内存为 8m,模拟 OOM 的场景。

HeapDumpOnOutOfMemoryError 表示在发生 OOM 时会自动 dump 。

-Xms4m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/heapdump.hprof

运行代码:

结果如下:

Connected to the target VM, address: '127.0.0.1:63909', transport: 'socket'
java.lang.OutOfMemoryError: Java heap space
Dumping heap to D:/heapdump.hprof ...
Heap dump file created [31923817 bytes in 0.263 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3210)at java.util.Arrays.copyOf(Arrays.java:3181)at java.util.ArrayList.grow(ArrayList.java:261)at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)at java.util.ArrayList.add(ArrayList.java:458)at com.example.demo.oom.OomTest.createObject(OomTest.java:21)at com.example.demo.oom.OomTest.main(OomTest.java:14)

可以看到 :

java.lang.OutOfMemoryError: Java heap space
Dumping heap to D:/heapdump.hprof …

这里的 D:/heapdump.hprof ,就是 dump 文件保存的路径。

打开 dump 文件

点击 Profiler ,再点击 Open Snapshot ,选择 上面的 dump 文件 D:/heapdump.hprof 。

在这里插入图片描述

点击 Biggest Objects, 可以看到 OomObject 这个对象占用了最大的内存。

结果如下:

在这里插入图片描述

使用 jdk 自带的 java visualvm ,分析dump文件, 找到 导致OOM 的代码

另外,也可以下载 MAT(Memory Analyzer Tool) 来分析 dump 文件。
此处使用 jdk 自带的 java visualvm 来分析 dump 文件, 找到 导致OOM 的代码 。

在 jdk 的 bin 文件中,找到 jvisualvm.exe 。点击即可运行。

在这里插入图片描述

  • 装入 hprof 后缀的 dump 文件 :

打开 VisualVM 后,点击左上角的图标 ,装入, 文件名选择 之前的 dump 文件 D:/heapdump.hprof 。

文件类型 选择 【堆Dump(*.hprof)】。

在这里插入图片描述

可以看到,在出现 OutOfMemoryError 异常错误时进行了堆转储,导致 OutOfMemoryError 异常错误的线程 是哪一个。

点击这个线程,即可显示导致OOM的线程堆栈。

在这里插入图片描述

  • 可以看到导致OOM的具体代码是类的哪一行:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现校园管理系统项目【项目源码+论文说明】

基于springboot实现校园管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;校园管理系统当然也不能排除在外。校园管理系统是以实际运用为开发背景&#xff0c…

数据仓库——大维度问题

大维度 大维度很深&#xff0c;有很多记录。大维度很宽&#xff0c;有很多属性。满足任何一种情况&#xff0c;都可以说这是个大维度。 由于数据量很大&#xff0c;很多包含大维度的数据仓库功能可能会很慢&#xff0c;效率很低&#xff0c;需要设计有效的方法&#xff0c;原则…

【数学】积性函数(以 P2303 为例)

定义&#xff1a; 若函数 f ( x ) f(x) f(x) 满足 ∀ gcd ⁡ ( a , b ) 1 , f ( a b ) f ( a ) f ( b ) \forall \gcd(a,b)1, f(ab)f(a)f(b) ∀gcd(a,b)1,f(ab)f(a)f(b)&#xff0c;则函数 f f f 为积性函数。 函数&#xff1a; 莫比乌斯函数 μ ( x ) \mu(x) μ(x) 为…

修改 RabbitMQ 默认超时时间

MQ客户端正常运行&#xff0c;突然就报连接错误&#xff0c; 错误信息写的很明确&#xff0c;是客户端连接超时。 不过很疑虑&#xff0c;为什么会出现连接超时呢&#xff1f;代码没动过&#xff0c;网络也ok&#xff0c;也设置了心跳和重连机制。 最终在官网中找到了答案&am…

windows-MySQL5.7安装

1.安装包下载 https://downloads.mysql.com/archives/community/&#xff08;社区版下载链接&#xff09; 选择Archives可以下载历史包&#xff0c;此处使用5.7.43 2.解压文件 解压文件到你指定安装的目录&#xff1a;解压完成后在mysql-5.7.43-winx64下新建文件my.ini和d…

企业引入“四力平衡”理念,激励员工工作积极性

—— 如何激励业务人员的工作积极性&#xff1f;【所属行业】生产制造业【问题类型】业务人员绩效考核【客户背景】J公司成立于1985年&#xff0c;目前主要从事机床、工具及相关产品的进出口贸易和国内营销业务&#xff0c;自1990年以来&#xff0c;一直属于全国最大的500家外贸…

如何备考2024年AMC10:吃透2000-2023年1250道真题(限时免费送)

有家长朋友问&#xff0c;有没有适合初中学生参加的奥数类比赛&#xff1f;我推荐AMC10美国数学竞赛&#xff0c;在国内可以方便地参加&#xff0c;而且每年全国各省市参加的初中生越来越多。关于AMC10详细的介绍和常见问题解答&#xff0c;可以联系我获得。 那么如何在AMC10竞…

正大国际:黄金投资稳定与保值的避险之选

黄金作为备受投资者追捧的贵金属&#xff0c;在金融市场中扮演着重要的角色。黄金作为一种避险资产具有稳定性和保值特性&#xff0c;能够在市场动荡时提供投资者的资金保护&#xff0c; 正大召煮4/26/12 xiaoccsw 避险需求:当股票市场、货币市场或其他资产类别表现不佳时&a…

浅谈交直流混合微电网能量管理系统关键技术研究综述

摘要&#xff1a;为了提升交直流混合微电网健康有效发展&#xff0c;提高直流互联微电网中分布式电源的能源使用效率&#xff0c;提升区域微电网稳定发展&#xff0c;对交直流混合微电网能量管理系统关键技术进行分析和研究很有必要。文章主要从交直流混合微电网能量管理系统架…

浅谈数据治理之道 数据分析(三)

1. 写在前面 1.1前言 在数据治理中&#xff0c;只有通过深入的数据分析&#xff0c;才能挖掘数据的真正价值&#xff0c;否则数据就发挥不了其作用。数据分析是数据治理环节之一&#xff0c;意在通过收集、整理、处理和解释数据&#xff0c;以获取有价值的信息和洞察力的过程…

cephadm安装reef版本ceph集群

环境 操作系统 Rocky Linux 9.2 minimal 三个节点节点名称 ipmipub ipclus ipceph1192.168.255.8192.168.120.10ceph2192.168.255.9192.168.120.20ceph3192.168.255.10192.168.120.30 所有节点 yum -y install dmidecode vim wget lvm2 chrony epel-release yum-utils dev…

LEETCODE 44. 反转字符串

class Solution { public:void swap(int l,int r,vector<char>& s){char tmps[l];s[l]s[r];s[r]tmp;}void reverseString(vector<char>& s) {int left0;int rights.size()-1;while(left<right){swap(left,right,s);left1;right-1;}} };

印度尼西亚国家出口发展局局长一行莅临锐捷网络,共话数字经济未来

第四届中国跨境电商交易会举办期间,印度尼西亚国家出口发展局局长迪迪苏梅迪一行莅临锐捷网络参观交流,宣传推介印度尼西亚市场资源,挖掘中印尼双方企业合作机遇。福州市商务局副局长潘文等领导共同参与活动。锐捷网络副总裁、数据中心事业部总经理林东豪接待。 印度尼西亚国家…

cesium加载.tif格式文件

最近项目中有需要直接加载三方给的后缀名tif格式的文件 <script src"https://cdn.jsdelivr.net/npm/geotiff"></script> 或者 yarn add geotiff npm install geotiff 新建tifs.js import GeoTIFF, { fromBlob, fromUrl, fromArrayBuffer } from geotif…

android——【封装】使用建造者方式封装一个类

前言 在Kotlin中&#xff0c;使用建造者模式来封装一个类有以下几个好处&#xff1a; 简化对象的创建过程&#xff1a;使用建造者模式可以将复杂的对象创建过程分解为多个简单的步骤&#xff0c;使得代码更加清晰易读。通过链式调用&#xff0c;可以按需设置对象的属性&#xf…

HBase的Python API(happybase)操作

一、Windows下安装Python库&#xff1a;happybase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase&#xff0c;需要开启HBase的Thrift服务。所以&#xff0c;在Linux服务器上&#xff0c;执行如…

香港高才通计划abc类的申请材料各不同,附官方续签攻略!

香港高才通计划abc类的申请材料各不同&#xff0c;附官方续签攻略&#xff01; 作为香港“史上最快获批签证”&#xff0c;高才通计划受到内地精英的热烈欢迎&#xff0c;香港高才通于2022年12月28日开放申请&#xff0c;截至2023年12月31日&#xff0c;香港高才通计划已接获62…

android 11 SystemUI 状态栏打开之后的界面层级关系说明之一

比如WiFi 图标的父layout为&#xff1a; Class Name: ButtonRelativeLayout Class Name: QSTileView Class Name: TilePage Class Name: PagedTileLayout Class Name: QSPanel Class Name: NonInterceptingScrollView Class Name: QSContainerImpl Class Name: FrameLayout Cl…

37.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-解码器细化类的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;36.数据解码器的…

Docker进阶:Docker-compose 实现服务弹性伸缩

Docker进阶&#xff1a;Docker-compose 实现服务弹性伸缩 一、Docker Compose基础概念1.1 Docker Compose简介1.2 Docker Compose文件结构 二、弹性伸缩的原理和实现步骤2.1 弹性伸缩原理2.2 实现步骤 三、技术实践案例3.1 场景描述3.2 配置Docker Compose文件3.3 使用 docker-…