news 2026/6/6 0:18:55

收到线上告警!newArrayList使用不当导致CPU飙升!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
收到线上告警!newArrayList使用不当导致CPU飙升!

昨天线上容器突然cpu飙升,也是第一次排查这种问题所以记录一下~

01

前言

首先问题是这样的,周五正在写文档,突然收到了线上报警,发现cpu占用达到了90多,上平台监控系统查看容器,在jvm监控中发现有一个pod在两个小时内产生了61次youngGc一次fullGc,这个问题特别严重且少见,由于我之前也没有排查过此类问题,所以也是百度,但整个过程也有一些自己的思考,所以跟大家分享一下~

02

当时场景

我先给大家看一下一副正常的gc曲线监控(为保密性,我自己按照平台监控画了出来):

正常的jvm监控曲线图

产生问题的jvm监控曲线图

可以看的出来,正常情况下该系统很少gc(具体看业务系统使用情况、jvm内存分配),但是在图二中出现了大量异常的gc情况甚至触发了fullGc,所以我当时立马进行了分析。

03

具体分析

首先异常gc的情况只出现在一个pod上(系统有多个pod),在监控系统找到对应的pod,进入pod内部查看问题原因,排查问题一定要冷静

1、进入pod之后,输入top查看各linux进程对系统资源的使用情况(因我这是事后补稿,资源使用不高,大家看步骤即可)

2、分析资源使用情况在当时的情况下

当时我的pid为1的进程cpu上到了130(多核)那我认定就是java应用出问题了,control+c退出继续往下走

3、输入top -H -p pid 通过此命令可以查看实际占用CPU最高的的线程的id,pid为刚才资源使用高的pid号

4、出现具体线程的资源使用情况,表格里的pid代表线程的id,我们称他为tid

5、我记得当时的tip为746(上述图片只是我给大家重复步骤),使用命令printf "%x\n" 746,将线程tid转换为16进制

因为我们线程id号在堆栈里是16进制的所以需要做一个进制转换

6、输入jstack pid | grep 2ea >gc.stack

jstack pid | grep 2ea >gc.stack

解释一下,jstack是jdk给提供的监控调优小工具之一,jstack会生成JVM当前时刻的线程快照,然后我们可以通过它查看某个Java进程内的线程堆栈信息,之后我们把堆栈信息通过管道收集2ea线程的信息,然后将信息生成为gc.stack文件,我随便起的。

7、当时我先cat gc.stack 发现数据有点多在容器里看不方便,于是我下载到本地浏览,因为公司对各个机器的访问做了限制,我只能用跳板机先找到一台没用的机器a,把文件下载到a然后我再把a里的文件下载到本地(本地访问跳板机OK),先输入python -m SimpleHTTPServer 8080,linux自带python,这个是开启一个简单http服务供外界访问

,然后登录跳板机,使用curl下载curl -o http://ip地址/gcInfo.stack 为方便演示,我在图中把ip换了一个假的

之后用同样的方法从本地下载跳板机就可以了,记得关闭python开启的建议服务嗷

8、把文件下载到了本地,打开查看编辑器搜索2ea,找到nid为2ea的堆栈信息

之后找到对应的impl根据行数分析程序

9、发现是在文件异步导出excel的时候,导出接口使用了公共列表查询接口,列表接口查询数据最多为分页200一批,而导出数据量每个人的权限几万到十几万不等

并且该判断方法使用了嵌套循环里判断,且结合业务很容易 get 不到 value,Java 下的new ArrayList 就是返回一个 List 集合(好像不用说这么细 (;一_一 ),在整个方法结束之前,产生的 lists生命周期还在所以发生多次gc触发重启之后还影响到了别的pod。然后对代码进行了fix,紧急上线,问题解决~

04

结束语

遇到生产问题,大家不要害怕,遇到问题先保证服务是否可用,然后通过有限的信息层层解析,找出最终的问题。如果你会 arthas,排查起来会更轻松!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 23:43:04

卫星通信基础知识完整整理 | 从入门到精通

目录 卫星通信概述卫星轨道类型卫星通信系统组成关键通信技术频段与频率分配卫星通信原理应用场景分析优缺点对比发展趋势总结 卫星通信概述 什么是卫星通信 卫星通信是指利用人造地球卫星作为中继站,在地球表面两个或多个点之间进行信息传输的通信方式。它通过将…

作者头像 李华
网站建设 2026/5/20 12:27:05

基于PHP+MySQL的自主可控的在线点餐小程序源码

温馨提示:文末有资源获取方式面对日益高涨的线上消费需求,餐饮商家如何拥有一套既能贴合自身特色,又能安全稳定运营的点餐系统?答案在于选择一套真正开放、可自主掌控的源码系统。下面介绍的这款高性能在线点餐小程序源码系统&…

作者头像 李华
网站建设 2026/5/30 8:33:33

AI 写论文哪个软件最好?虎贲等考 AI 凭全流程闭环成毕业论文首选

还在纠结 AI 写论文哪个软件最好?对着五花八门的工具挑花眼,试了多款却要么只懂文字拼接,要么文献漏洞百出,要么格式规范完全不符高校要求?作为深耕论文写作科普的博主,后台每天都被 “毕业论文 AI 工具怎么…

作者头像 李华
网站建设 2026/6/5 2:05:31

国外研究文献网站使用指南:如何高效查找与获取学术资源

刚开始做科研的时候,我一直以为: 文献检索就是在知网、Google Scholar 里反复换关键词。 直到后来才意识到,真正消耗精力的不是“搜不到”,而是—— 你根本不知道最近这个领域发生了什么。 生成式 AI 出现之后,学术检…

作者头像 李华
网站建设 2026/5/20 9:28:21

导师严选2026 TOP8 AI论文工具:MBA开题报告全测评

导师严选2026 TOP8 AI论文工具:MBA开题报告全测评 2026年MBA论文写作工具测评:为何需要一份权威榜单? 在当前AI技术快速发展的背景下,MBA学生在撰写开题报告和论文过程中,面临诸多挑战。从选题构思到文献综述&#x…

作者头像 李华
网站建设 2026/5/20 23:44:21

java_ssm107网上蛋糕店商城销售系统的设计与实现_idea项目源码

目录 具体实现截图项目背景与意义技术架构与功能模块创新点与优势应用价值 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 具体实现截图 项目背景与意义 随着电子商务的快速发展,线上蛋糕销售成…

作者头像 李华