OOM日志分析

目录

  • 1. 日志分析
  • 2. MAT 工具
    • 2.1 日志打印方式
      • 2.1.1 HeapDumpOnOutOfMemoryError(推荐)
      • 2.1.2 jmp 命令
    • 2.2 MAT分析方式
      • 2.2.1 饼图分析
      • 2.2.2 树形图分析
      • 2.2.2 泄漏疑点
  • 3. 优化

首先说一下结论:通过MAT工具分析才是最精准的,直接通过日志排查可能不是主要原因。

1. 日志分析

直接从日志文件定位 (不精准)
在这里插入图片描述
可以看到这是个 OutOfMemoryError内存溢出异常,Java heap space 表示java堆内存溢出。并且 at org.example.controller.Test.test(Test.java:27) 指定了具体位置,找到具体代码就能定位问题。
在这里插入图片描述
上面的方法不一定是精准的,有可能其他地方占用了百分之80内存,刚好一个低内存方法创建对象的时候OOM,所以这种方式存在误判性。

2. MAT 工具

2.1 日志打印方式

通过打印dump文件通过MAT工具查看。
打印dump文件方式有两种,一种是在启动jar包添加 -XX:+HeapDumpOnOutOfMemoryError (推荐),一种是执行 jmp -dump命令

2.1.1 HeapDumpOnOutOfMemoryError(推荐)

在启动jar包时,添加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof,在服务OOM时会打印dump文件到当前目录heapdump.hprof文件中,然后通过MAT工具查看

例如:通过 nohup java -Xms512m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof -jar byzq-yc.jar > ./byzq-yc.log 2>&1 & 启动服务。

将 heapdump.hprof文件拷贝出来,打开MAT工具,选择File -> Open File -> 选择 heapdump.hprof
在这里插入图片描述

加载完后,点击 Finish

在这里插入图片描述

2.1.2 jmp 命令

首先使用 jps 查看进程ID,或者top查看内存较高进程ID,然后使用jmap来生成堆转储文件:

jmap -dump:live,format=b,file=heapdump.dat<PID>

后续跟前面一样,通过mat工具分析即可

2.2 MAT分析方式

2.2.1 饼图分析

直接根据饼图分析,占用最大的这部分多半就是引起OOM的元凶,实际可能会存在多个占用比例比较大的,逐个分析就好
在这里插入图片描述
通过 Java Basics -> Thread Details 或 Thread Overview and Stacks 都可以找到对应的代码位置
在这里插入图片描述
在这里插入图片描述

2.2.2 树形图分析

点击 Dominator Tree 我们能看到线程树形的内存占比
在这里插入图片描述
可以看到这个Object 占比比较高,同样通过 Java Basics -> Thread Details 或 Thread Overview and Stacks 都可以找到对应的代码位置
在这里插入图片描述

2.2.2 泄漏疑点

点击 Leak Suspects 可以直接查看到一个报错信息
在这里插入图片描述
点击Details
在这里插入图片描述
不仅可以查看到一个内存占比,还能查看到报错信息
在这里插入图片描述

3. 优化

分析具体原因后,考虑是代码原因则优化代码。如果代码问题不大则考虑提升堆内存空间

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

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

相关文章

2025秋招NLP算法面试真题(二)-史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer

简单介绍 之前的20个问题的文章在这里&#xff1a; https://zhuanlan.zhihu.com/p/148656446 其实这20个问题不是让大家背答案&#xff0c;而是为了帮助大家梳理 transformer的相关知识点&#xff0c;所以你注意看会发现我的问题也是有某种顺序的。 本文涉及到的代码可以在…

C语言中的字符输入/输出和验证输入

在C语言中&#xff0c;字符输入/输出功能允许程序与用户进行交互&#xff0c;读取用户的输入信息并展示输出结果。同时&#xff0c;验证输入的作用在于确保用户输入的数据符合预期&#xff0c;以提高程序的稳定性和可靠性&#xff0c;防止无效输入引发的错误或异常行为&#xf…

JavaWeb——MySQL:DDL操作库

目录 1.DDL&#xff1a;查询数据库&#xff1b; 1.1 查询数据库 1.2 创建数据库 1.DDL&#xff1a;查询数据库&#xff1b; 具体操作&#xff1a;增 删 查 用 &#xff1b; 1.1 查询数据库 SQL语句&#xff1a;show databases; 由于我创建过一些数据库&#xff0c;我查询的…

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行&#xff0c;所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --…

计算机专业:昔日万金油,明日科技潮头的弄潮儿

高考后的十字路口&#xff1a;计算机专业&#xff0c;依旧闪耀吗&#xff1f; 随着2024年高考的尘埃落定&#xff0c;数百万青春洋溢的脸庞再次凝视着未来的迷雾&#xff0c;试图在繁星点点的专业宇宙中找到那颗最亮的星——计算机科学与技术。长久以来&#xff0c;计算机专业…

【目标检测】DAB-DETR

一、引言 论文&#xff1a; DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR 作者&#xff1a; IDEA 代码&#xff1a; DAB-DETR 注意&#xff1a; 该算法是对DETR的改进&#xff0c;在学习该算法前&#xff0c;建议掌握多头注意力、Sinusoidal位置编码、DETR等相…

Android jetpack Room的简单使用

文章目录 项目添加ksp插件添加 room 引用开始使用room1. 创建bean2. 创建 dao类3. 创建database类 数据库升级复制数据库到指定路径参考文献 项目添加ksp插件 注意&#xff0c;因为ksp插件 是跟项目中使用的kotlin的版本要保持一致的&#xff0c;否则会报错的 首先我们去 https…

Python18 数据结构与数据类型转换

1.python中的数据结构 在Python中&#xff0c;数据结构是用来存储、组织和管理数据的方式&#xff0c;以便有效地执行各种数据操作。Python提供了几种内置的数据结构&#xff0c;每种都有其特定的用途和操作方法。以下是Python中一些主要的数据结构&#xff1a; 1.列表&#…

攻防世界-2-1

下载附件&#xff0c;发现是一张损坏的png文件&#xff0c;扔winhex里面修改文件头 修改之后发现还是打不开&#xff0c;提示CRC错误&#xff0c;脚本跑一下 循环冗余校验CRC&#xff08;Cyclic Redundancy Check&#xff09;是数据通信领域常用的一种数据传输检错技术。通过在…

记录Nuxt3部署线上pm2启动项目修改端口

看官方文档&#xff1a; TNND&#xff0c;修改这个端口号顶个P用&#xff0c;毛用也没有 实际上应该是这样&#xff1a; 好了&#xff0c;误人子弟&#xff5e;

太速科技-基于AD916X的直流至 12 GHz 矢量信号发生器 FMC子卡

基于AD916X的直流至 12 GHz 矢量信号发生器 FMC子卡 一、DAC 性能指标&#xff1a; ● DAC 型号&#xff1a;AD9163。 ● 分辨率&#xff1a;16bits。 ● DAC 更新速率&#xff1a;12GSPS。 ● 6GSPS 直接 RF 频率合成。 ● 直流至 3GHz&#xff08;不归零 NRZ 模式&…

粉笔1000题——判断推理

目录 一、图形推理1. 位置规律平移旋转、翻转 二、定义判断三、类比推理四、逻辑判断 一、图形推理 1. 位置规律 平移 旋转、翻转 二、定义判断 三、类比推理 四、逻辑判断

Python+Pytest+Yaml+Request+Allure框架源代码之(一)common公共方法封装

common模块&#xff1a; get_path.py&#xff1a;获取路径方法 # -*- coding: UTF-8 -*- import os# 项目根目录 BASE_DIR os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 配置文件目录 CONFIG_DIR os.path.join(BASE_DIR,config)# 测试用例文件目录 TESTCA…

[SAP ABAP] 删除内表数据

1.利用索引删除数据 语法格式 DELETE <itab> INDEX <idx>. <itab>&#xff1a;代表内表 <idx>&#xff1a;代表索引值 删除内表<itab>中的第<idx>条记录 示例1 lt_student内表中存在3条数据记录 我们使用如下指令删除内表中的第一条数…

Linux 7种 进程间通信方式

传统进程间通信 通过文件实现进程间通信 必须人为保证先后顺序 A--->硬盘---> B&#xff08;B不知道A什么时候把内容传到硬盘中&#xff09; 1.无名管道 2.有名管道 3.信号 IPC进程间通信 4.消息队列 5.共享内存 6.信号灯集 7.socket通信 一、无名管道&a…

mysql中in参数过多该如何优化

优化方式概述 未优化前 SELECT * FROM rb_product rb where sku in(1022044,1009786)方案2示例 public static void main(String[] args) {//往list里面设置3000个值List<String> list new ArrayList<>();for (int i 0; i < 3000; i) {list.add(""…

我在高职教STM32——LCD液晶显示(3)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

一键智能整理TXT文档,高效删除连续行,轻松提升工作效率与数据管理效能

信息爆炸的时代&#xff0c;TXT文档作为我们日常工作中不可或缺的一部分&#xff0c;承载着大量的数据和信息。然而&#xff0c;随着文档内容的不断增加&#xff0c;连续重复的行数也逐渐增多&#xff0c;这不仅影响了文档的整洁度&#xff0c;还大大降低了我们处理数据的效率。…

Monica

在 《long long ago》中&#xff0c;我论述了on是一个刚出生的孩子的脐带连接在其肚子g上的形象&#xff0c;脐带就是long的字母l和字母n&#xff0c;l表脐带很长&#xff0c;n表脐带曲转冗余和连接之性&#xff0c;on表一&#xff0c;是孩子刚诞生的意思&#xff0c;o是身体&a…

24年下半年各省自考报名时间汇总

24年下半年各省自考报名时间汇总