日常问题排查-Younggc突然变长 - 无毁的湖光

news/2025/10/20 9:22:22/文章来源:https://www.cnblogs.com/alchemystar/p/19150110

日常问题排查-Younggc突然变长

前言

研发突然反馈一个版本上线后线上系统younggc时间变长,而这个版本修改的代码就是非常普通的CRUD,但是younggc时间就硬生生暴涨了100%。导致天天告警,虽然问题不大,但非常想知道原因,于是向我求助。

问题现场

如下图所示,younggc一个版本后从60ms涨到了120ms。而告警的阈值在100ms,导致每次younggc都告警。显然,调整告警阈值是最简单的方案,但作为一个有好奇心对技术很执着的同学,他很纠结于这个问题。当然我也是遇到有意思的问题就必须去一探究竟的性格,两者一拍即合。

younggc_slower

代码改动

第一反应肯定是去看代码的变化,代码改变如下所示:

改之前:
void functionA(){......a.setBuinsessKey(key1);......
}改之后:
void functionB(){......a.setBusinessKey(Key1);a.setBuinessesKey(Key2);a.setBusinessKey(Key3);......
}

看着这微小的改动引起了这么大的变化,这是不可能的。笔者第一时间便否决了这种可能性。

流量变化

以这么多年我troubleshooting的第一直觉,肯定是负载变化才能引起younggc耗时的变化。询问那位同学,他明显是已经考虑了这样的问题。当即甩给了我相关的监控截图。从分钟级的尺度来讲,没有任何变化。

younggc_slower

容器问题

由于younggc耗时高集中在几台机器上,于是笔者登陆上那几台机器,发现在younggc耗时变高的时候都出现了nr_throttled,也就是当前容器的CPU时间片消耗达到了配置的cgroup上限,导致被kernel强制offline了。但到底是younggc导致了throttle还是throttle导致了younggc,这个因果关系以现有的信息来说完全无法判断。

nr_throttled_delta

Younggc日志

既然不能一眼看出来原因,那只能上去分析gc日志了,比对一下gc。发现差距在Object Copy上。

偏长younggc 120ms
[Object Copy (ms): Min: 107.5, Avg:108.2,Max:108.9,Diff:0.8,Sum: 869.5]正常younggc 60ms
[Object Copy (ms): Min: 55.2, Avg: 56.1, Max:56.3, Diff: 1.1,Sum: 450.0]

嗯,从这个数据来判断,肯定是要Copy的数据变多了。为什么会变多呢?看看其younggc后的各年代的变化。

偏长younggc 120ms
[Eden: 4804.0M(4804.0M)->0.0B(4784.0M) Survivors: 108.0M->128.0M Heap: 6632.7M(8192.0M)->1848.8M(8192.0M)]正常younggc 60ms
[Eden: 4848.0M(4848.0M)->0.0B(4832.0M) Survivors: 64.0M->80.0M Heap: 6717.7M(8192.0M)->1888.0M(8192.0M)]

笔者敏锐的观察到Survivor区变大了。偏长Younggc Survivor区是108M,而正常Younggc Survivor区是64M。

Object Copy哪些数据

问了一下gemini,object copy的对象一般有从

1.从Eden Region复制到Survivor Region
2.从Survivor Region复制到老年代Region

这两个地方进行Copy。也就是说,如果Survivor区变大了之后,Object Copy的数据应该是会变多。
嗯,虽然大模型经常忽悠我,但这个回答还是比较符合逻辑的,姑且就相信他。

观察gc监控

鉴于上面的分析,笔者突然觉得Younggc的时间很有可能和Survivor区的大小成正比关系。一旦Survivor区大于一个阈值,那么Younggc时间就会超过100ms,进而导致告警。为了验证这个关系,笔者去观察了不同机器正常younggc和偏长younggc的关系。发现完全符合这个规律。

为什么Survivor区会变化

由于分钟级的请求量没有任何变化。监控当前的精度只能到分钟级,于是笔者只能在请求机器上的日志中寻找相关的线索。比较了相关的业务日志,笔者敏锐的发现了一个不一样的地方。在相同数据量的情况下,分批的次数越多它的Younggc越长。

如果一共需要处理100W条数据
case 1: 分了10000批,每批处理1000条数据,Survivor区100M。对应的younggc在100-120ms
case 2: 分了5000批,每批处理2000条数据,Survivor区50M,对应的youggc在50-70ms

发现了这个规律之后,笔者去看了下业务系统的源代码。其伪代码如下所示:

// 这边的batchNo就是
for(long batchNo : batchNoList) { 	// 按照批次从数据库中捞取相关数据List<Task> task = selectFromDBBatchNo(bachNo);// 处理相关数据	handleTask(task);
}

看到这段代码,上面的规律就很好理解了,batchNoList以及其相关数据是一直在for的计数里面,一直到处理完毕整个batchNoList以及其相关数据的引用都不会被回收。所以batchNoList(批次)数量越大,在Survivor区younggc的时候需要copy到old区的数据量就越多。反而在每次循环的循环体中,通过batchNo从数据库中捞取的数据在处理完之后就没用了,younggc的时候自然消亡,完全不参与相关younggc运算。

long_vs_normal

为什么以前没问题上了个版本就出问题了

首先这个肯定和修改的代码没有关系,笔者推测是由于上游流量的变化导致了批次数量的变化。这个也在后续的数据分析中得到了相关的印证。

解决方案

找到根本原因之后,解决这个问题就很简单了,将分批数给设定一个最大值,强制限制分批大小。代码只需寥寥数行,但是要知道怎么改则需要大量的观察和分析。

总结

Younggc时间变长是一个比较棘手的问题,因为它的可观测信息过少,而且往往和代码变更无关,而和请求分布导致的内存生成速率与存活分布有关。这时候只有通过大量的观察来分析各种数据间的相关性然后通过底层原理推断出因果性,最后才能找到根因。

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

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

相关文章

2025年铸造与机加工自动化厂家推荐排行榜,重力铸造自动化,机加工自动化公司推荐!

2025年铸造与机加工自动化厂家推荐排行榜,重力铸造自动化,机加工自动化公司推荐!行业背景在制造业快速发展的当下,铸造与机加工自动化领域正经历着深刻的变革。随着劳动力成本的上升、生产效率要求的提高以及产品质…

ICPC2023沈阳 游记(VP)

砍下铜中,又是主包猪鼻如果罚时管理优秀又银了(没错永远都是“差点”银)。省流 砍下铜中,又是主包猪鼻如果罚时管理优秀又银了(没错永远都是“差点”银)。10.19 内含剧透,请vp后再来。 不是题解!!!!!!! …

2025年给汤机厂家推荐排行榜,优质给汤机,精准给汤,高效稳定公司推荐!

2025年给汤机厂家推荐排行榜,优质给汤机,精准给汤,高效稳定公司推荐!一、行业背景在现代工业生产中,给汤机作为压铸生产线上的关键设备,其重要性日益凸显。压铸工艺广泛应用于汽车、电子、航空航天等众多领域,而…

2025年10月豆包排名优化服务排行榜评测:十家优质服务商综合对比分析报告

一、引言 在人工智能技术快速发展的当下,生成式引擎优化即GEO,特别是针对豆包等主流AI平台的排名优化服务,已成为企业数字化转型不可或缺的一环。对于广大创业者、市场营销负责人及企业决策者而言,选择专业的GEO服…

2025?CTF(部分wp) -- week1

2025?CTF -- week1crypto Basic Number theory 题目: from Crypto.Util.number import * from secret import flagdef gift(m, prime):return pow(m, (prime + 1) // 2, prime)m = bytes_to_long(flag) p = getPrime…

2025年10月豆包排名优化服务推荐排行榜:十大服务商对比评测与选择指南

一、引言 在人工智能技术快速发展的当下,生成式引擎优化即GEO,特别是针对豆包等平台的排名优化,已成为企业提升数字化竞争力的关键环节。对于广大创业者、市场负责人及企业管理者而言,如何选择高效、可靠且成本可控…

2025?CTF(部分wp) -- week2

2025?CTF -- week2crypto AES_mode 题目: from Crypto.Cipher import AES from Crypto.Util.Padding import pad import binascii from Crypto.Util.number import bytes_to_long from secret import flag import os…

为WPF应用增加项目图标

前言 本文梳理一下怎么给WPF应用增加自己的项目图标,还是以Rouyan为例进行说明。 过程 首先想一下这个项目图标想要运用在哪些地方。在WPF中你想为你的应用增加你的项目图标主要在这三个地方。 1、应用程序图标设置 2…

完整教程:基于YOLOv8-OBB的SAR图像目标检测系统

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于STM32单片机的ECG心电滤波算法

基于STM32单片机的ECG心电滤波算法一、系统架构设计 1. 硬件组成主控芯片:STM32L476(Cortex-M4内核,1MB Flash,16KB RAM) 信号采集:ADXL345三轴加速度计(运动伪迹检测) ADC模块:ADS1292(24位分辨率,250Hz采…

《掰开揉碎讲编程-长篇》一文读懂 哈希表

博主粉丝群介绍: ① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。 ② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。 ③ 群内也有职场精英,…

CF2128E2 Submedians (Hard Version)

考虑一个很直觉的东西,可行的中位数一定是连续的。具体来说,你将一个区间左右端点扩展,中位数一定只会有 \(+1, -1\) 的变化,因此覆盖到的区间一定是连续的。 我们找出可以的最小的中位数,和最大的中位数,类似莫…

Java 网络编程详解

Java 网络编程详解Java 网络编程是指通过 Java 语言实现计算机之间的网络通信,核心是利用 Java 提供的网络类库(如 java.net 包)操作 TCP/IP 协议,实现数据的发送与接收。无论是客户端与服务器的通信、分布式系统交…

Office365破解版下载(附永久激活密钥) 及安装使用教程

Office365破解版下载(附永久激活密钥) 及安装使用教程Office 365 是一套集成了 Word、Excel、PowerPoint、Teams、OneDrive 等工具的生产力套件,通过云服务实现高效协作与智能办公。以下是实用技巧,助你提升工作效率…

【URP】Unity中Mipmap Streaming原理与实现

摘要: Unity URP的纹理流送技术通过动态加载纹理的Mipmap层级优化显存使用。传统Mipmap会预加载所有层级(占用显存为原始纹理的4/3倍),而流送技术根据物体与摄像机的距离,仅加载当前所需的层级,其他层级按需异步…

如何设计PAD ring?

流程: 1)根据系统(其他芯片的)要求,芯片内部的floorplan,决定信号PAD的位置 2)计算出power PAD的个数,插入到信号PAD里面 3)加其他的PAD,比如IO filler,power cut,power on control,corner PAD,ESD等 细…

2025 年钢结构源头厂家最新推荐排行榜:聚焦美标欧标 / 环保设备 / 厂房别墅等多领域优质供应商,精选优质厂家助力企业精准选材

引言在当前钢结构行业快速发展的背景下,市场需求不断攀升,但行业乱象也随之凸显。部分企业资质不全却违规承接项目,导致工程质量与安全隐患;有些企业缺乏核心技术,产品性能不稳定,难以满足美标、欧标等高标准要求…

PostgreSQL 18 中国贡献者经验分享:开源参与的四点建议

2025 年 9 月 25 日,PostgreSQL 18 正式发布。该版本不仅修复了上百个问题,更带来了多项颠覆性的功能升级,例如全新的异步 I/O(AIO)框架、新增的跳跃式扫描(SKIP SCAN)技术,以及原生 UUIDv7 支持等,每一项升级…

C#实现连续语音转文字

一、基础实现方案(System.Speech) 1. 环境配置 // 安装NuGet包 Install-Package System.Speech// 添加语言包(控制面板) 控制面板 -> 语言 -> 添加中文语音包2. 核心代码实现 using System.Speech.Recogniti…

2025 年铝门窗厂家推荐排行榜,系统 / 智能 / 断桥 / 窄边 / 定制 / 全景 / 阳光房 / 隐框 / 隔声 / 防火铝门窗公司推荐

引言当前铝门窗市场需求攀升,但行业乱象凸显。部分小型厂家生产体系不完善,产品材质不达标、工艺粗糙,耐用性差;多数企业创新不足,产品同质化严重,难以满足消费者个性化需求;且不少品牌售后体系缺失,消费者维权…