记录一次生产jvm问题的排查

news2024/9/24 2:07:18

记录一次生产问题的排查

第一天晚上

现象
1、前援反馈页面有接口陆续出现请求超时
2、登录后台服务器top命令查看发现java进程发生高cpu占用情况
3、查看对应业务日志,报数据库连接等待超时-数据库连接池连接无空闲
对应处理
1、临时调大数据库连接池最大连接数限制,从20调整到50
2、重启服务,先保证业务可用

第二天

观察服务器指标
1、free -h 查看内存使用情况,java进程占用高内存
在这里插入图片描述
2、查看进程gc情况,jstat -gc 2773947 1000 10,因为该项目没有打印GC日志只能这样临时观察。查看GC日志,
依次是
S0C:幸存0区容量(约350M)、
S1C:幸存1区容量(约350M)、
S0U:幸存0区已使用(201M)、
S1U:幸存1区已使用(0M因为是年轻代用-XX:+UseParNewGC,复制算法)

新生代内存按照8:1:1的比例分为一个eden区和两个survivor(survivor0,survivor1)区。一个Eden区,两个 Survivor区(一般而言)。大部分对象在Eden区中生成。回收时先将eden区存活对象复制到一个survivor0区,然后清空eden区,当这个survivor0区也存放满了时,则将eden区和survivor0区存活对象复制到另一个survivor1区,然后清空eden和这个survivor0区,此时survivor0区是空的,然后将survivor0区和survivor1区交换,即保持survivor1区为空, 如此往复

EC:伊甸区容量350M
EU:伊甸区已使用97M
OC:老年代容量4194M
OU:老年代已使用2878M
MC:元空间大小213M,jdk1.8之前叫永久代
MU:元空间已使用196M
CCSC:压缩类空间大小;(暂不知道用处)
CCSU:压缩类空间使用大小;(暂不知道用处)
YGC:年轻代gc 4786
FGC:老年代GC(可以看下图,这是两次GC日志的对比,才短短几分钟就出现了两次Full GC,而且查看上下两次GC情况,发现在FULL GC后垃圾有被回收,即EU和OU有变小,先排除内存泄漏。可以猜测应该是有大对象产生触发老年代空间担保机制,直接将老年代占满从而触发FULL GC。)
在这里插入图片描述
3、通过jmap -histo 18830| head -n 20 命令查看堆中比较多的对象
根据PaTerminalRealTimeQuery对象找到近期提交的代码,是漏掉一个设备id的参数,导致数据库中200w的设备数据都被捞到list中来。产生了大对象。
在这里插入图片描述

总结:主要是大对象的产生导致第一天的数据库连接被占用,第二天的内存过大、频繁FULL GC问题。
优化范式:
1、调整错误的业务代码
2、增加gc日志及dump文件的打印,具体参数改变如下
修改前:

-Xms5120M -Xmx5120M -Xmn1024M -XX:PermSize=256M -XX:MaxPermSize=512M -Xss256K -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0

修改后:

-Xms3072M -Xmx3072M -Xmn1024M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -Xss256K -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -verbose:gc -Xloggc:/tysl/log/gc/manageLoadBalance-gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tysl/log/

修改点:
1、内存用不了这么大,反而老年代过大反而会让stw的时间边长,调小老年代内存
2、增加gc日志及dump的打印信息,以便后续排查问题
3、原项目估计是从1.7升级到1.8的,永久代的参数没有改过来,极端情况下,如遇到某些动态代理对象的生成会将元空间不断扩展(因为元空间不设置默认是共享整个物理内存空间的,极端场景会压缩堆空间,触发频繁FULL GC)-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M

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

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

相关文章

如何发布自己的NPM包详细步骤

前言 在前端开发中,将自己编写的 Vue 组件或插件打包并发布到 NPM 上,不仅可以方便自己在其他项目中复用,还能分享给更多的开发者使用。本文将从 NPM 注册、登录与发布流程,及如何通过 Vue CLI 打包插件的角度详细介绍如何发布 V…

C#线程的使用

每个正在操作系统上运行的应用程序都是一个进程,一个进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。 1、单线程 单线程就是只有一个线程。默认情况下,系统为应用程序分配一个主…

论团体标准的有效期

在当今快速发展的社会中,标准对于规范行业秩序、保障产品和服务质量起着至关重要的作用。其中,团体标准作为标准体系的重要组成部分,以其灵活性和专业性受到了广泛的关注。而团体标准的有效期,则是一个值得深入探讨的重要议题。 团…

2024年最新上榜的文件加密管理软件

文件加密市场风起云涌,后辈迭出,2024年安企神软件在文件加密管理软件市场中备受瞩目,凭借其强大的功能和全面的保护策略,成功上榜并受到广泛认可。以下是对它的详细介绍: 一、产品概述 安企神软件不仅是一款电脑监控…

“软件定义汽车”下的软件虚拟化技术

01.虚拟化技术概述 近年来,随着嵌入式软硬件的高速发展,嵌入式系统产品已融入日常生活的方方面面,在航空航天、车载电子、工业控制等要求更为严苛等领域的应用也更加广泛。特别对汽车领域,每辆车内ECU的使用数量已从21世纪初的30…

定时任务调度`crond` 和 `at` 命令使用

😀前言 本篇博文是关于 linux实操篇-定时任务调度crond 和 at 命令,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满…

【心酸报错】ImportError: failed to find libmagic. Check your installation

目录 报错信息:ImportError: failed to find libmagic. Check your installation按照网络上找的办法修改还是报错:LookupError:Resource punkt not found.下载nltk_data又报错:AttributeError: tuple object has no attribute page_content怀…

软件工程概述(下)

4、软件工程原理 (1)什么是软件工程? 软件工程是指导计算机软件开发和维护的一门学科。 采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来&#xf…

【Qt】常用控件QCheckBox

常用控件QCheckBox QCheckBox表示复选按钮,可以允许选中多个。 QCheckBox继承自QAbstractButton 例子:获取复选按钮的取值 使用Qt Designer先大体进行设计 代码实现: #include "widget.h" #include "ui_widget.h"Widge…

【数学建模】趣味数模问题——舰艇追击问题

问题描述 某缉私舰位于走私船以东 d 10 km,走私船以匀速 u 8 km/h 向北沿直线行驶。缉私舰立即以速度 v 12 km/h 追赶。缉私舰使用雷达进行跟踪,保持瞬时速度方向始终指向走私船。求解缉私舰的追逐路线和追上走私船所需的时间。 方法 理论求解&…

阿里巴巴拍立淘API返回值:商品搜索与社交媒体的融合

阿里巴巴拍立淘API返回值在商品搜索与社交媒体融合方面展现出了巨大的潜力和价值。以下是对这一主题的详细分析: 一、拍立淘API在商品搜索中的应用 1. 技术原理 拍立淘API基于图像识别技术,利用深度学习算法对上传的图片进行智能分析,快速…

WebSocket协议解析与Java实践

文章目录 一、HTTP协议与HTTPS协议1.HTTP协议的用处2.HTTP协议的特点3.HTTP协议的工作流程4.HTTPS协议的用处5.HTTPS协议的特点6.HTTPS协议的工作流程 二、WebSocket协议出现的原因1. 传统的HTTP请求-响应模型2. 轮询(Polling)3. 长轮询(Long…

《向量数据库指南》——AI应用长文本与RAG技术爬坡

技术爬坡 长文本的技术爬坡方向 推理质量不能有所下降,如何在保质保量的做长文本的推理,是一件非常困难的事。 解决了能力问题之后,还要解决贵且慢的问题。前面讲到两个瓶颈,一个是推理成本会特别高,一个是首token会特别慢。在一个阶段解决好这两个问题之后,待上下文窗口…

深度学习基础案例3--构建CNN卷积神经网络实现对不同天气的识别(测试集准确率百分之90+)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 基础阶段目标目标 熟悉CNN、RNN神经网络,了解yolo、transfomer等模型熟练使用Pytorch框架,了解tensorflow 本次目标 了解CNN神经网络…

使用ToDesk云电脑3个月,这5个功能点越用越爽!

在过去的三个月里,小埋 有幸 深度 体验了ToDesk云电脑这一创新科技产品,它不仅彻底改变了我的工作方式,还让我在日常学习和娱乐中享受到了前所未有的便捷与高效。 下面就跟着小埋,一起来看看 ToDesk云电脑使用体验极佳的五大功能特…

解决银河麒麟V10登录循环的方法

解决银河麒麟V10登录循环的方法 一:进入命令行二:删除.Xauthority文件三:重启系统 💖The Begin💖点点关注,收藏不迷路💖 在使用银河麒麟桌面操作系统V10时,有时可能会遇到一个令人头…

JavaScript - 对象

Array 数组 定义 var 变量名 new Array(元素列表);//方式一 var 变量名 [ 元素列表 ];//方式二 访问 arr[ 索引] 值; 属性 length : 设置或返回数组中元素的数量 方法 forEach() : 遍历数组中每个有值的元素&…

Spring cloud alibaba(一)nacos

一、注册中心 作用:解决微服务之间复杂的调用关系; 实现思路: 服务注册:就是将提供某个服务的模块信息注册到一个公共组件上去 服务发现:就是新注册这个服务模块能够及时的呗其它调用者发现,不管是服务新增…

前端开发中的大屏布局方案:使用 rem 单位与动态设置 html 的 font-size

使用 rem 单位与动态设置 html 的 font-size 前言 随着设备尺寸的多样化,网页需要能够在不同大小的屏幕上提供良好的用户体验。传统的布局方式(如使用 px)在不同分辨率下可能会导致布局失真。为了解决这个问题,我们可以通过动态…

微分方程(Blanchard Differential Equations 4th)中文版Section3.3

具有实特征值的线性系统的相图 在前面的部分,我们看到直线解在求解某些线性微分方程系统的通解中起着主导作用。为了求解这样的系统,我们首先使用代数方法计算系数矩阵的特征值和特征向量。当我们找到一个实特征值和一个相关的特征向量时,就可以写出对应的直线解。此外,在…