JVM内存配置错误导致的线上服务问题

news2024/9/19 10:36:21

1.现象

大量用户反映不能正常使用服务,导致用户无法进行下一步工作。

2.检查

因为是休息日,初步听到这个消息的时候怀疑是自己的锅。一是因为项目刚刚进行了重构;二是对MySQL数据进行了迁移,并且对待迁移的旧数据进行了数据分析与调整。此次用户反馈的问题也是项目重构之后也是第一次上线,所以首先怀疑是自己写的代码问题,但是代码都是经过几轮测试之后才正式上线的,应该问题不大;其次怀疑是数据迁移导致的问题,因为历史原因,之前的数据在创建的时候很不规范,所以在迁移的时候进行数据分析时比较麻烦,会导致迁移后的数据与旧数据对应不上。

然后立马打车赶到公司查看服务线上日志。先查看调用方的日志,发现确实是进入到服务提供方(此次重构的服务)之后就出现问题了,顿时心凉半截,想着多怕是自己写的代码问题。然后立马又去查看我的服务,居然发现并不是代码问题,而是显示连接不上redis了。

然后立马反馈给组长,组长说找运维看一下redis的堆栈信息,原本想着是redis是因为负载太大而崩溃了,但是运维反馈redis运行正常 。

我也查看了nacos上配置的redis最大连接数为32,也没啥问题。然后再查看服务引入的redis依赖包,因为该依赖包是公司自研的,并且我在其基础上添加了redis加锁重试机制,因为报错的地方就是在执行加锁重试那一块代码,所以我怀疑是这部分代码的问题。但是经过我的检查,这部分代码也没有什么大问题,不管是释放连接、手动释放锁、给锁加了过期时间,这些都是做了的。

然后我将排查的结果反馈给组长,组长在经过进一步排查之后,说是服务内存问题。他查看了服务内存使用情况,居然发现内存使用的曲线图波动很大。

堆内存在增加到最大堆内存之前,一直没进行回收。

现在就要看为什么出现这种情况了。

可能性有2:

1、分配了过多的大的对象直接到老年代,导致内存直接被打满。但是到达最大堆内存时,又能直接进行回收,没有出现OOM,那么说明对象不是不可回收的对象。
2、新生代、老年代比例异常。导致过多的对象直接生成在新生代,新生代等到内存达到一定阈值才会进行回收。符合这一特征。

那么接下来就是检查JVM参数
"corpora-ability"   : ["devName": "cat-corpora-ability", "contextPath": "/corpora-ability", "xmx": "16G", "xmn": "16G", "limit-m": "18G", "cpu": "4", "request-m": "18Gi", "enableMetrics": "true"],
            "corpora-business"  : ["devName": "cat-corpora-business", "contextPath": "/corpora-business", "xmx": "8G", "xmn": "8G", "limit-m": "10Gi", "cpu": "4", "request-m": "10Gi", "enableMetrics": "true"]

居然发现错误的配置xmn : 16G 和8G ,导致新生代的内存和整个堆内存一致。

也就是JVM在分配对象的时候,会一直分配内存直到打满整个堆内存,此时进行回收。新生代大多数都是可以直接回收的对象。所以内存马上就降下来了。但是因为一次性需要回收大量对象,STW过长。系统在GC期间,其它线程会受影响。所以redis的问题是表象之一。

STW最高能达到3S左右,此时很多心跳检测都会失效。

3.处理

修改xmn配置,重启服务。我想着16g内存,给新生代分配差不多三分之一的内存就行,没想到组长说只需要分配1g就可以。那行吧,听组长的....

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

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

相关文章

【qt】如何读取文件并拆分信息?

需要用到QTextStream类 还有QFile类 对于文件的读取操作我们可以统一记下如下操作: 就这三板斧 获取到文件名用文件名初始化文件对象用文件对象初始化文本流 接下来就是打开文件了 用open()来打开文件 用readLine()来读取行数据 用atEnd()来判断是否读到结尾 用split()来获取…

LabVIEW中modbusTCP怎样才能和profibusDP通信?

在LabVIEW中,Modbus TCP和Profibus DP是两种不同的工业通信协议,要实现这两者之间的通信,可以采用网关设备进行协议转换,或者通过一个中间设备(如PLC)进行数据桥接。以下是实现此通信的一些方法&#xff1a…

王牌站士Ⅵ--人工智能集成商的崛起

前言 系统集成商 (SI) 具有独特的优势,可以利用 GenAI 的变革力量。通过综合各种数据并重新定义客户获取见解和采取行动的方式,SI 可以发展成为AI 集成商,彻底改变企业的运营方式和与技术的互动方式,当然,还可以保留长…

[人工智能]对未来建筑行业的影响

作者主页: 知孤云出岫 目录 引言1. 人工智能在建筑行业的应用场景1.1 设计阶段1.2 施工阶段1.3 运营和管理 2. 关键技术2.1 机器学习2.2 计算机视觉2.3 自然语言处理2.4 大数据分析 3. 实际案例分析3.1 案例1:利用GAN生成建筑设计方案3.2 案例2:利用计算…

在ROS中控制机器人运动

一、安装Arbotix 输入指令:sudo apt install ros-noetic-arbotix 找到下载的文件:roscore,roscd arbotix 安装好后,不需要按照教程里面的操作,复制进工作空间。 二、在config中建立配置文件,control.yaml # 该文件…

了解并缓解 IP 欺骗攻击

欺骗是黑客用来未经授权访问计算机或网络的一种网络攻击,IP 欺骗是其他欺骗方法中最常见的欺骗类型。通过 IP 欺骗,攻击者可以隐藏 IP 数据包的真实来源,使攻击来源难以知晓。一旦访问网络或设备/主机,网络犯罪分子通常会挖掘其中…

给 「大模型初学者」 的 LLaMA 3 核心技术剖析

编者按: 本文旨在带领读者深入了解 LLaMA 3 的核心技术 —— 使用 RMSNorm 进行预归一化、SwiGLU 激活函数、旋转编码(RoPE)和字节对编码(BPE)算法。RMSNorm 技术让模型能够识别文本中的重点,SwiGLU 激活函…

敏捷开发笔记(第10章节)--Liskov原则(LSP)

目录 1:PDF上传链接 10.1 Liskov替换原则(LSP) 10.2 一个违反LSP的简单例子 10.6 启发式规则和习惯用法 10.7 结论 1:PDF上传链接 【免费】敏捷软件开发(原则模式与实践)资源-CSDN文库 OCP背后的主要机制是抽象(abstraction…

CSS【详解】边框 border,边框-圆角 border-radius,边框-填充 border-image,轮廓 outline

边框 border border 是以下三种边框样式的简写: border-width 边框宽度 —— 数值 px(像素),thin(细),medium(中等),thick(粗)border-style 边框线型 —— none【默认值…

数据库MySQL下载安装

MySQL下载安装地址如下: MySQL :: Download MySQL Community Server 1、下载界面 2、点击下载 3、解压记住目录 4、配置my.ini文件 未完..

整洁架构SOLID-里氏替换原则(LSP)

文章目录 定义LSP继承实践正例反例 LSP软件架构实践反例 小结 定义 1988年,Barbara Liskov在描述如何定义子类型时写下了这样一段话: 这里需要的是一种可替换性:如果对于每个类型是S的对象o1都存在一个类型为T的对象o2,能使操作T…

树莓派PICO使用INA226测量电流和总线电压(1)

TI的INA226是一款不错的16位电流测量芯片,拥有非常高的性价比,而且测量精度能够覆盖我们大多数的应用场景,INA226的接线也比较简单,通过I2C读取数据会稍微麻烦一点。 INA226可以在淘宝上直接买开发板,非常的便宜&#…

本地部署,去除动漫图像背景Anime Remove Background

目录 摘要 引言 深度学习在动漫角色中的应用 1.​U-Net 2.Mask R-CNN 3.ISNet 模型 4.MODNet 模型 5.InSPyReNet 模型 本地部署 运行效果 测验结果​ Tip: 摘要 动漫图像背景去除是一项在图像处理和计算机视觉领域具有重要应用的技术,广泛应用于…

「Pytorch」roLabelImg 图像异常旋转 bug

在进行Yolo-obb 模型训练的时候需要标注旋转框,roLabelImg 是比较推荐的一款旋转框标注工具,既可以标注正常的矩形框,还可以标注旋转框 roLabelImg Github 地址:https://github.com/HumanSignal/labelImg 但是在使用过程中遇到了…

Word中使用LaTeX编辑公式

在日常学术写作过程中,公式输入必不可少。然而使用Word传统的公式编辑器往往无法满足高标准的排版要求,如排版不专业、编辑效率低、兼容性差等问题。LaTeX相比Word,在公式输入及排版方面更为强大,但是对于轻量级的任务&#xff0c…

Vivado 2020.1 HLS IP在BD模式无法生成问题

折腾了一周整整,记录一下,希望对大家有用。 各种找、各种操作,也问了FAE,都没搞定。 最后看到如下博文的方法3,管用。 vivado综合hls类ip核报错问题解决方案_vivado ip synth checkpoint mode-CSDN博客 报错描述 m…

Chatto企业AI助手产品技术拆解(上)

往期文章: AI智能客服项目拆解(1) 产品大纲 在上一篇文章中,我们详细介绍了AI智能客服的基本概念、需求分析、产品形态及分类,以及AI在线客服的用户体验流程和系统架构。为了更深入地理解AI智能客服的内在工作机制和技术实现,本…

【读论文】Instant Neural Graphics Primitives with a Multiresolution Hash Encoding

文章目录 1. What2. Why2.1 Introduction2.2 Related work and background 3. How: Multiresolution hash encoding3.1 Structure3.2 Input coordinate3.3 Hash mapping3.4 Interpolation3.5 Performance vs. quality3.6 Hash collision 4. Experiment on Nerf 1. What To red…

Pygame开发五子棋之人机对战游戏

引言 Pygame是一个基于Python的开源游戏开发库,它包含了丰富的多媒体功能,尤其是针对游戏开发所需的各种组件。如果你对游戏开发感兴趣,但又不想从底层开始编写所有东西,Pygame可以成为一个理想的起点。本文将介绍Pygame的基本概…

C++:类和对象 I(访问限定符、this指针)

目录 类的定义 类的大小 访问限定符 实例化 this指针 类的定义 class就是类,class是C中的一个关键字 当然类也可以是C语言中的struct,C兼容struct,甚至还有一些升级 定义类的方式 class Date {}; 和C语言的struct一样,c…