Java OOM问题排查


1.问题现象

tomcat web页面无法访问,日志报出如下错误,

问题出现频率 1晚上1次。

有时候会打印出oom的代码位置,有时候不会打印,不会打印则按照如下流程排查

2.问题排查过程

排查OOM主要是要获取内存的快照文件,但此时jvm已经僵死,无法通过jmap打印内存dump文件。     所以修改tomcat启动脚本增加export JAVA_OPTS 这行增加 如下内容

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/tomcat-heap-dump.hprof  

这里表示,当出现oom异常时会自动把当时的内存快照文件打印到/data/tomcat-heap-dump.hprof

2.1修改tomcat启动脚本

// 1.进入docker     
docker exec -it tomcat /bin/bash

//2.打开catalina.sh 
vi /data/apache-tomcat-9.0.71/bin/catalina.sh 

//3.找到export JAVA_OPTS=这行,增加如下内容,保证下次出险oom时,自动打印对快照。
//-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/tomcat-heap-dump.hprof

//4.重启tomcat
docker restart tomcat

2.2分析tomcat-heap-dump.hprof文件

在下次出现oom时,会自动dump出内存快照,使用jprofile打开该快照文件一共35G,打开第一次需要花费的时间比较久。

打开之后如下图所示hashmap的Node有1.98亿

点击 biggest object,看到mybatis返回的list占16G

如果点击biggest object没有大对象占用,那么可以选择group by class,分组可以知道某个对象虽然很小,但是可能某一类却很多。这样也能分析出内存异常占用问题,下图就是这种情况。

右键选择 Use selectd objects

选择如下点击ok

2.3 查看堆栈信息

接2.2最后一步之后,

点击show more,可以看到传入的堆栈信息,发现是我们项目代码造成内存占用这么大

3.最后分析具体代码

经过分析是由于该导出定时任务,分页参数失效做了全表查询,该表在mysql中有5个G。经过导入到内存中可能存储容量就翻倍了,因为堆内存中有其他对象信息加起来可能会比原先的数据量大很多。而且在那部分代码中做了两次全表查询,也就是将这5g数据导入到内存中导入了两次,随后老年代被沾满oom溢出。

该定时一天执行一次,所以一天一次OOM

4.总结

0.看日志,如果日志中打印了代码位置则直接分析相对应的代码,如果分析不出或者没打印则进行如下流程

1.拿到dump文件

2.用jprofile分析

3.找到大对象入口

4.分析具体功能具体代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NISP一级备考知识总结之信息安全概述、信息安全基础

1.信息安全概述 信息与信息技术 信息概述 信息奠基人香农认为:信息是用来消除随即不确定性的东西信息是事务运动状态或存在方式的不确定性的描述信息是具体的,并且可以被人(生物,机器等)所感知、提取、识别&#xf…

GPT-ArcGIS数据处理、空间分析、可视化及多案例综合应用教程

原文链接:GPT-ArcGIS数据处理、空间分析、可视化及多案例综合应用教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247603080&idx1&sn3e0d7015a2a717c320ebea3a673388ee&chksmfa82126fcdf59b795c7e2cea575470d42480ab809b926be5f94633eac…

测斜仪的具体应用:从地下工程到斜坡监测

测斜仪作为一种精密的测量工具,在多个领域都有广泛的应用。从最初的地下工程,到现今的斜坡监测,测斜仪的技术进步和应用范围的扩大,为工程安全提供了有力的保障。 一、地下工程中的测斜仪应用 在地下工程中,测斜仪主要…

第十二届蓝桥杯省赛真题 Java 研究生 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 卡片试题 B: 相乘试题 C: 直线试题 D: 路径试题 E : \mathrm{E}: E: 回路计数试题 F: 时间显示试题 G: 最少砝码试题 H : \mathrm{H}: H: 杨辉三角形试题 I: 双向排序试题 J:分果果 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&…

AI智能写作工具推荐-AI在线写作生成器-1分钟完成写作

随着人工智能技术的不断发展,越来越多的写作软件开始使用AI技术来帮助用户更高效地创作文章。 第一款:笔尖AI写作 笔尖Ai写作-在线AI写作工具 - 笔尖Ai写作原创影视解说文案生成器,AI自动生成高质量原创内容。拥有超过435个智能写作模板&am…

SpringSecurity + JWT实现登录认证

前置基础请参考&#xff1a;SpringSecurity入门-CSDN博客 配置&#xff1a; pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version></p…

二手交易系统基于Uniapp+FastAdmin+ThinkPHP(源码搭建/上线/运营/售后/更新)

​一款基于UniappFastAdminThinkPHP开发的二手交易系统&#xff0c;卖家可以发布二手信息&#xff0c;买家可以在线询价&#xff0c;支持在线聊天(高级授权)&#xff0c;在线购买支付&#xff0c;支持发布高价回收(高级授权)信息。自带社交板块&#xff0c;用户可以发布帖子、加…

【论文笔记】DiL-NeRF: Delving into Lidar for Neural Radiance Field on Street Scenes

原文链接&#xff1a;https://arxiv.org/abs/2405.00900 1. 引言 自动驾驶等应用领域需要逼真的仿真。传统的仿真流程需要手工创建3D资产并构成虚拟环境&#xff0c;但其人力和专业需求使其难以具有可放缩性。 NeRF有不错的仿真能力&#xff0c;但需要大范围覆盖的训练数据以…

【MySQL的内置函数】

文章目录 一、日期函数1.current_date()2.current_time()3.current_timestamp4. date_add 穿越未来5.date_sub 回到过去6.datediff案例 二、字符串函数2.1charset2.2 concat ——拼接字符串2.3 ucase——转化成大写2.4 lcase——转化成小写2.5 left&#xff08;&#xff09;2.6…

计算机毕业设计 | springboot+vue小米商城 购物网站管理系统(源码+论文+讲解视频)

1&#xff0c;项目背景 国家大力推进信息化建设的大背景下&#xff0c;城市网络基础设施和信息化应用水平得到了极大的提高和提高。特别是在经济发达的沿海地区&#xff0c;商业和服务业也比较发达&#xff0c;公众接受新事物的能力和消费水平也比较高。开展商贸流通产业的信息…

无管理员权限linux系统手动切换cuda版本

查看当前计算机cudatoolkit的版本 nvcc -V下载 如果想切换到指定版本&#xff0c;则去官网下载&#xff08;10.1版本为例&#xff09;&#xff1a; cuda下载 cudnn下载 将下载好的文件放到服务器的文件夹中 安装 安装cuda sh cuda_10.1.243_418.87.00_linux.run选择接受 …

教你一招,一键解锁云盘与NAS自动同步!

想象一下 数字生活就像一座繁忙的都市 云盘是你的空中阁楼 俯瞰着整个城市的美景 而NAS是坚实的地基 承载着所有珍贵的记忆 那如何让数据在 城市的高空与地面之间自由穿梭呢&#xff1f; 别急&#xff01;铁威马来帮你&#xff01; TOS 6创新功能&#xff1a;云盘挂载 …

STM32CubeMx 生成IAR工程Jlink无法Debug

肯定是工程设置问题喽&#xff1a; 设置OK!

java小知识:图片添加中文水印,部署到linux环境乱码解决

源码如下&#xff1a; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Objects;/*** 图片添加文字水印** param so…

Rust学习笔记(上)

前言 笔记的内容主要参考与《Rust 程序设计语言》&#xff0c;一些也参考了《通过例子学 Rust》和《Rust语言圣经》。 Rust学习笔记分为上中下&#xff0c;其它两个地址在Rust学习笔记&#xff08;中&#xff09;和Rust学习笔记&#xff08;下&#xff09;。 编译与运行 Ru…

璩静也是受害者

5月7日&#xff0c;“百度副总裁璩静称员工闹分手提离职秒批”话题登上了热搜。在短视频里&#xff0c;璩静是会连续出差50天的“公关人”&#xff0c;没有春节周末、没有假期&#xff0c;她会说“员工闹分手提离职我秒批&#xff0c;为什么要考虑员工的家庭”。有网友对其视频…

知识库优劣详解:牵牛易帮 VS HelpLook AI知识库

知识库不仅可以帮助企业有效管理知识&#xff0c;还能提高员工工作效率和质量&#xff0c;因此越来越多的企业选择搭建知识库。在众多搭建知识库的工具中&#xff0c;有的企业会选择免费的牵牛易帮&#xff0c;有的则会更加倾向于付费的HelpLook AI知识库。其中的原因有很多。今…

力扣数据库题库学习(5.11日)--176. 第二高的薪水

176. 第二高的薪水 问题链接 分析 题目要求&#xff1a; 查询并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水&#xff0c;查询应该返回 null 。 下面是示例&#xff1a; 查询结果如下例所示。 示例 1&#xff1a;输入&#xff1a; Employee 表&#xff1a; --…

Java——类与对象

目录 一、面向对象的初步认识 1.1 什么是面向对象 1.2 面向对象与面向过程 二、类的定义与使用 2.1 简单认识类 2.2 类的定义格式 三、类的实例化 3.1 什么是实例化 3.2 类和对象的说明 四、this引用 4.1 为什么要有this引用 4.2 什么是this引用 ​编辑 4.3 this引用…

verilog中输入序列连续的序列检测

编写一个序列检测模块&#xff0c;检测输入信号a是否满足01110001序列&#xff0c;当信号满足该序列&#xff0c;给出指示信号match。 模块的接口信号图如下&#xff1a; 代码如下&#xff1a; &#xff08;CSDN代码块不支持Verilog&#xff0c;代码复制到notepad编辑器中&am…