通过Dump文件分析OOM产生的原因

article/2025/8/30 17:21:06

起笔:

文章的源起在于本人想向道哥(导演)拿一份公司Dump文件。

问题描述

本地模拟可能产生OOM的几十种不同的方法(自由发挥),然后通过类随机去调用方法,通过Dump文件分析是哪个方法导致程序的OOM

代码实现:

代码

分析工具:

Jprofile(mac版本) 提取码:vvwn

过程:

  • 第一步 :设置jvm参数
-Xmx20m -Xms20m -XX:+HeapDumpOnOutOfMemoryError
  • 第二步:启动程序,生成Dump文件
public static void main( String[] args ) throws Exception {Random random = new Random();RandomOOM randomOOM = new RandomOOM();int i1 = random.nextInt(4);randomOOM.Entrance(i1);}
  • 第三步:分析Dump文件
    • 打开dump文件
      可以思考一下为什么这里只有堆遍历器是亮的
      在这里插入图片描述

    • 分析内存

      • 将对象按大小排序
        在这里插入图片描述

        这里排序完毕可以看到Character数组占了非常的多的内存,其他Object等类占的内存相对较小,其实在这里我们就可以知道,程序产生OOM的原因是因为Character数组对象创建过多,而且Character数组对象又无法被jvm进行回收(当然现实生产中OOM产生的原因不能这么简单地去概括,还需要结合实际情况去分析,具体情况具体分析)

      • 排序后的结果:

        在这里插入图片描述

      • 对象的引用分析:
        在这里插入图片描述
        选择传入引用
        在这里插入图片描述
        这里可以看到这些Character数组都大小一致,也大概可以知道应该是一个对象引用了他们,然后我们需要去分析Character数组的引用对象有哪些,最后定位问题代码所在(当然现实场景中,这里也可能更复杂,可能这里的Character数组对象大小不同,那么是怎么造成的内存泄漏又需要我们灵活地去分析!!)
        在这里插入图片描述
        选中在图表中显示,这里也可以选择显示道GC根的路径,但是为了方便观看,通过图表无疑是最佳的
        在这里插入图片描述
        图表的初始面貌
        在这里插入图片描述
        这里我们可以知道是一个Object对象引用了Character[]对象导致Character[]对象无法被jvm回收,那么这个Object是被什么类引用导致无法被回收了?依次分析下去
        在这里插入图片描述
        在这里插入图片描述
        分析到这一步的时候,大家可能会有疑惑,Object类有两个类去引用了它,那么该分析那个类的引用关系才能将问题定位到出现问题的方法中呢?这里因为这个代码是我本人写的,所以我知道那个类能最快定位问题出现的方法中,因此直接选的OOMObject(真实场景中,会比这个更加复杂,可能会有几十到几百个类,这就需要我们去根据代码仔细考量一番!)
        在这里插入图片描述
        最后到了这一步,其实就已经知道了造成OOM问题的罪魁祸首在于OOMObject#_16方法中,因此我们直接去这个类中找方法分析代码就行了!!


http://chatgpt.dhexx.cn/article/OAo6QEgJ.shtml

相关文章

IBM heapAnalyzer分析dump文件

项目在生产环境中内存溢出时多数会生成dump 文件 IBM开发的强大的内存dump分析工具,IBM heapAnalyzer是通过分析OOM后的Java heap dump文件的,通过对dump文件的分析找到可能!!!泄露的点。(注意&#xff1a…

JVM调优--04---dump文件分析 、arthas在线排查工具

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 dump文件java堆转储快照 1. dump文件内容2. 获取dump文件的方法指令jvisualvm 工具 3. dump文件分析工具3.1 jhat 命令3.2 使用 jvisualvm 工具3.3 使用 MAT 工具 a…

Dump文件生成,内容,以及分析

​​​​​​​本文用到的工具只是简单介绍,让你有个感官认识,重点是核查思路的熟悉 为啥需要dump内存文件 服务器CPU,内存占用空间飙升,或者GC频繁,首先需要排除的就是内存泄露,即内存中没有的对象的空间…

java dump可视化在线内存分析工具

方便分析内存、线程使用情况、死锁等情况的在线可视化分析dump工具 一般也可以自己装MAT,JProfiler等工具,但是这个在线可视化HeapHero分析dump非常全面,总之,非常nice。 HeapHero https://heaphero.io/index.jsp 导出dump并上传…

mac pro m1:安装dump文件内存分析工具——MAT

0. 引言 本文主要针对mac m1下安装Jprofiler进行讲解,安装核心步骤同样适用于其他系统 1. 安装 如果使用的是eclipse可以在插件中直接安装MAT,因为我使用的是idea开发,所以选择独立安装MAT工具 1、下载地址:https://www.eclip…

使用WinDbg分析Windows dump文件方法

需要使用WinDbg工具来分析windows系统产生的dump文件,此工具属于Windows SDK的一个组件,在微软官方网站可以下载(链接)。 在安装Windows SDK的过程中,可以选择只安装WinDbg(Debugging Tools for Windows&a…

jvm mat分析dump文件

jvm调优中,经常使用dump来分析是否存在大对象导致频繁full gc,以下为使用步骤: 一、获得服务进程 二、生成dump文件 jmap -dump:formatb,filexxx.dump pid 三、下载mat工具 地址:https://www.eclipse.org/mat/downloads.php 注意,…

jvm---6.1、dump 文件分析工具 IBM HeapAnalyzer

IBM HeapAnalyzer 工具 官网: https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid4544bafe-c7a2-455f-9d43-eb866ea60091 官网翻译如下; HeapAnalyzer允许通过启发式搜索引擎查找可能的Java™堆泄漏区域…

linux dump 分析工具,使用 Crash 工具分析 Linux dump 文件

与具有众多的内存转储机制一样,Linux 下也有众多的内存转储分析工具,下面将会逐一做简单介绍。 Lcrash 是随 LKCD 一起发布的一个内内存储分析工具。随着 LKCD 开发的停止,lcrash 的开发也同时停止了。目前它的代码已经被合并进入 Crash 工具…

.NET -- 使用Dump文件分析异常

目录 1. Dump文件 2. 程序崩溃时自动生成Dump文件 2.1 注册表生成 2.2 代码生成 3. 手动生成Dump文件 3.1 任务管理器生成 3.2 VS生成 4. Dump文件调试分析 4.1 简易崩溃测试代码 4.2 VS2022调试 4.3 非本机测试 1. Dump文件 Dump文件是进程的内存镜像。可以把程序…

java heapdump 分析工具_heapdump分析工具

heapdump分析工具是一款强大的数据分析工具,它可以用图表的形式来展现相应的分析结果,在使用heapdump分析工具之前请先安装JDK1.6。 运行环境 1.运行环境要求JDK 1.6或以上 如果JDK版本过低,报错如下: Exception in thread "…

php中dump是什么文件怎么打开,Win8/Win10 dump文件怎么打开?dump文件分析工具下载及使用教程...

从Win8系统开始到Win10,蓝屏界面大变脸,不再显示详细的代码错误文件,看起来是友好多了不过对用户查找回题原因来说就麻烦不少了~好在Win8/win10 在蓝屏时会生成dump文件,我们可以使用专用工具进行分析解读查找到问题所在。下面小编…

Dump文件分析工具 - MAT图文解析

/ 前言 / 在讲解Mat工具之前我们先来看下几个关于Dump/文件的问题 Dump文件是什么 Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中 我们拿到Dump文件有什么用的? 假如JVM因为内存溢出的原因宕机了, 而程序的日志里面并没有关于溢出所在对象的信息…

【华为云技术分享】干货分享丨jvm系列:dump文件深度分析

摘要:java内存dump是jvm运行时内存的一份快照,利用它可以分析是否存在内存浪费,可以检查内存管理是否合理,当发生OOM的时候,可以找出问题的原因。那么dump文件的内容是什么样的呢? JVM dump java内存dump是…

Java的dump文件分析及JProfiler使用

Java的dump文件分析及JProfiler使用 1 dump文件介绍 从软件开发的角度上,dump文件就是当程序产生异常时,用来记录当时的程序状态信息(例如堆栈的状态),用于程序开发定位问题。 idea配置发生OOM的时候指定路径生成dump文件 # 指定…

获取和分析Dump的几种工具简介

最近在进一步学习support技能的时候,了解到分析Dump的重要性,经过学习,做一些笔记。 一、什么是Dump文件。 Dump文件时进程的内存镜像。可以把程序的执行状态保存到Dump文件中。Dump文件分为内核模式Dump和用户模式Dump。其中内核模式Dump是…

JVM-通过MAT工具对dump文件进行分析

文章目录 MAT工具介绍下载安装使用OverviewHistogramDominator_TreeOQLThread_OverviewLeak Suspects MAT工具介绍 MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内…

错误号码2058:Plugin caching sha2_password could not be loaded

安装SQLyog之后,新建接口,输入密码,点击连接,发现出现了如下的错误: 1.错误的原因 SQLyog加密方式出现了错误,这时由于 插件缓存——sha2_密码无法进行加载所导致的。 2.解决方法 在开始菜单中输入命令…

2023/06/28

文章目录 1.export和export default的区别2.npm和cnpm的区别3.npm run dev/serve的区别4.slice、splice和split的区别 1.export和export default的区别 模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输…

02.07 SQLyog连接MySQL数据库时报2058错误(转载)

使用SQLyog连接MySQL时报了这样一个错 “错误号码2058,Plugin caching——sha2_passward could not be loaded:******** ”(乱码) 将报错信息翻译:“插件缓存——sha2_密码无法进行加载”,这是由于你的SQLyog mysql 密码加密方法变了&#…