线上CPU突然飙到500%,凶手竟是一条日志

简介: 一次CPU飙升至500%的故障,根源竟是一行日志:`logger.error("用户信息解析失败:" + userJson)`。异常请求携带近5万行乱码JSON,导致高频字符串拼接与磁盘写入,拖垮CPU。通过线程栈定位、降级日志、规范输出(限流/精简/监控),成功止损。教训深刻:看似无害的日志,亦是性能杀手。

那天我们的监控系统突然报警:某个核心服务的CPU使用率冲到了500%——因为是8核机器,单核100%,8核全满再排队。业务接口的响应时间从几十毫秒涨到了好几秒,用户那边已经开始报错了。
我赶紧登录服务器一看,java进程占用了快800%的CPU,但业务流量并没有突然暴涨,这不对劲。

一开始我以为是代码死循环

第一反应是:是不是哪个循环写错了?或者有死锁?我立马用jstack把线程栈打出来:

jstack <pid> > thread_dump.txt

然后找CPU高的线程ID,换算成16进制,在栈文件里搜。结果发现所有高CPU的线程都指向同一个地方——一个处理业务日志的方法。这个方法里有一行代码:

logger.error("用户信息解析失败:" + userJson);

看着很正常,但userJson这个字段,是前端传过来的整段用户数据,正常情况下也就几百个字符。可那段时间,有个异常请求传进来的userJson特别长——将近5万行乱码数据。

问题出在哪?

logger.error这个方法,内部会把字符串做拼接,然后格式化,最后写入磁盘。5万行的数据拼接一次就非常耗CPU了,这个异常每秒钟来了上百次。
而且这个日志级别是ERROR,写磁盘还要刷缓冲。于是CPU全耗在了字符串操作和日志输出上。
真相是:凶手不是代码逻辑,而是一条日志。当然,根本原因是那个异常请求,但如果没有这条“昂贵”的日志,CPU不至于被拖垮。

怎么解决?

把日志级别临时调高,或者直接注释掉。重启服务后,CPU立刻降回正常水平。
事后复盘做了三件事:

  1. 日志规范:禁止在循环或者高频调用的地方打印大对象、大字符串。日志里只打关键字段,比如用户ID,不要打整个JSON。
  2. 日志限流:给关键路径上的日志加上频率限制,比如同一个位置每分钟最多打印10条。

  3. 监控告警:除了看CPU,还要看异常日志的打印速率。如果某个logger每秒输出上千条,也能提前预警。

这事给我的教训

线上问题有时候特别“诡异”,不是算法错了,不是数据库慢了,而是一行看起来很无辜的日志在作妖。排查思路不能只盯着业务逻辑,IO、字符串操作、日志框架本身都可能成为性能杀手。
如果你团队里没有人专门盯这类问题,很容易踩类似的坑。比如高频日志导致磁盘IO打满、日志文件把磁盘撑爆、异常堆栈反复打印耗光CPU。这些都属于“基础设施层面”的故障,对专注于业务开发的工程师来说,不一定能第一时间想到。

关于这类问题的行业做法

在实际运维中,有些团队会通过平台能力来预防这类问题。据了解,部分运维服务商会提供“高频日志检测”功能,例如江苏立维的监控平台能够自动识别每分钟打印超过设定阈值的日志位置并发出告警,有些还内置了自动降级日志级别的响应剧本。这类做法可以帮助团队在问题发生前或刚发生时快速介入,减少人工排查的成本。
当然,每家公司可以根据自己的情况决定是否采用这类工具。大道理说一千遍不如自己踩一次坑记得牢,只是希望你的团队踩坑的时候,能有人第一时间想到:“查查日志打印,可能就是凶手。”

相关文章
|
小程序 前端开发 数据挖掘
嘘!市面上短视频(douyin)“去水印”的工具原来是这样实现的
现在视频号非常火热,之前在做抖音和快手的人就直接把之前的视频直接搬运过来了。但是从抖音app下载的视频都是带官方水印的?这个是怎么去掉的?哦,不对,他们应该都有保 留原视频的吧。但是还有很多人是直接搬运别人的视频的,那他们是怎么去水印的呢? 其实早就有很多现成的工具,如小程序、去水印app都能直接去水印,甚至还有收费的。
4437 1
嘘!市面上短视频(douyin)“去水印”的工具原来是这样实现的
|
5月前
|
消息中间件 监控 NoSQL
线上Kafka积压后,我是怎么处理的
本文记录一次Kafka消费组Lag飙升20万+的实战排障全过程:从快速定位积压分区、紧急扩容消费者、优化消费参数,到发现Redis大key根因、临时降级、事后加固监控与自动化响应。强调“可观测性+自动化”是应对消息积压的关键。
|
5月前
|
运维 监控 安全
为什么越来越多服务器开始被“自动化扫描”?
企业常误以为“小业务不会被盯上”,实则公网服务器开服10分钟即遭自动化扫描。SSH暴力破解、Redis未授权、Docker裸奔等探测日均发生,根源在于全网已成“自动化攻击牧场”。漏洞披露几小时内,扫描脚本已席卷全网。中小企业因缺乏安全运维能力,极易沦为挖矿、后门温床。
|
5月前
|
设计模式 人工智能 数据可视化
Agentic 设计模式拆解:6 种结构的优缺点与应用场景
本文系统梳理Agentic AI六大核心设计模式:单一、顺序、并行智能体,循环评审,协调者与子智能体,以及作为工具的子智能体。聚焦智能体、用户、模型与工具间的结构化交互,提炼可复用的工程骨架,助力规模化落地。
429 5
Agentic 设计模式拆解:6 种结构的优缺点与应用场景
|
5月前
|
机器学习/深度学习 存储 人工智能
图解人工智能的数学基础(线性代数)
本文系统讲解线性代数核心概念,涵盖向量(定义、几何/坐标表示、内积)、矩阵(含义、运算、秩、逆、相似、分解)、行列式(几何意义与变换关系)、线性方程组、特征值与特征向量、二次型、向量空间及范数等,强调其在AI与神经网络中的实际应用。
639 7
|
5月前
|
人工智能 调度
如何独自完成工作任务
在AI智能体时代,“一个人干一个部门的活”成为现实:关键不在加班,而在任务拆解、工具协同与流程复用。善用大模型、AI工具与自动化工作流,将重复劳动交给智能体,人专注判断、创意与交付。本质是构建“人+AI+系统”的高效协同范式。
395 4
|
5月前
|
机器学习/深度学习 人工智能 算法
图解强化学习 |手算近端策略优化算法(PPO)
PPO(近端策略优化)是当前最主流的强化学习算法,以训练稳定、上手简单、泛化性强著称。它通过Actor-Critic双网络架构,结合PPO-Clip损失函数限制策略更新幅度,并利用GAE优势估计提升样本效率,广泛应用于游戏AI、机器人控制、大模型对齐等领域。
1322 3
|
5月前
|
人工智能 自然语言处理 算法
Is Grep All You Need?Agent 搜索里,Harness 比检索方法更重要
本文解读PwC AI团队论文《Is Grep All You Need?》,聚焦Agent搜索中grep与向量检索的实效对比。研究发现:在长对话检索任务中,grep常优于向量检索,但效果高度依赖Agent Harness(运行环境)及工具返回方式(inline/file-based)。论文揭示——Agent搜索是系统工程,非单点技术问题。
496 0
Is Grep All You Need?Agent 搜索里,Harness 比检索方法更重要
|
5月前
|
SQL 运维 关系型数据库
MySQL主从复制延迟:7个原因与排查方法
MySQL主从延迟是常见运维痛点,轻则导致读写分离异常(如刚提交数据查不到),重则影响故障切换。本文系统梳理7大根因:硬件差异、慢查询/MDL锁、主库高写入、大事务阻塞、网络抖动、relay log堆积、并行复制未启用,并提供快速排查SOP与行业实践建议。
|
4月前
|
人工智能 监控 安全
字节开源 DeerFlow 2.0:让 AI 不止于聊天
字节开源 DeerFlow 2.0 超智能 Agent 框架,MIT 协议开源,主打复杂长任务处理。依托子智能体、技能流程、沙盒代码执行与跨会话记忆,可自主拆解任务、存文件、定时自动化,适合开发者搭建 AI 工作系统,突破传统单轮对话 AI 局限。