当前位置: 首页 > news >正文

日志级别修改不慎引发的一场CPU灾难

背景

今天下午16.28有同事通过日志配置平台将某线上应用部分包的日志等级由error调为info,进而导致部分机器CPU升高,甚至有机器CPU达到100%,且ygc次数增加,耗时增加到80~100ms。

故障发现与排查

16.28陆续出现线上CPU使用率告警,先紧急扩容以保障线上稳定,同时摘掉了几台CPU100的机器。另外部分网关接口调下游RPC接口出现20%超时,可用率下降。
调用链路看板中有几个rpc接口tp999增加,网关超时对应的接口与rpc无关,为本地缓存 + 分布式缓存的数据。分布式缓存监控稳定,tp999在5ms之内。由此基本可以判断是机器内部的原因。
找到网关调用超时的一条记录,进行排查,发现日志打印合理,但接口出入参的时差很大,且所在机器ygc频繁,同时耗时增加。这里还无法找到问题根源,我们进一步分析。
选中某台CPU高的机器,观察实时日志,可以发现出现了大量的rpc接口超时,且日志输出迅速。由此基本可以判断是日志出了问题,检查日志平台的配置,发现在16.28有同事调整了某个包的日志配置,于是同步相关人员恢复原始配置,恢复后,观察10分钟,发现服务趋于稳定。

故障分析

我们这个应用日常CPU使用率在40%左右,有商详、搜索、百补等大流量渠道调用,资源利用率较高。
调用量包括:助手历史信息6k的qps,商详12k的qps,百补9k的qps以及搜索2k的qps和其他接口2kqps等。
随着日志级别的调整,大量的info日志输出到磁盘,这些额外的日志记录需要执行更多的代码逻辑,包括json序列化,磁盘IO等需要消耗更多的 CPU 资源。同时由于对象的序列化,导致内存占用增加,ygc增多,另外CPU利用率升高也导致了ygc耗时增加。继而触发CPU升高,导致部分服务可用率下降。

防范措施

在操作线上日志级别时一定先要分析预计的日志量以及可能涉及的日志范围。
有时为了排查线上问题,会将很多中间节点日志打成info,线上我们一般不需要关注这块,可以将其等级置为error,但是出入参日志需要保留,以防出现线上问题时可以通过预发环境进行复现。
另外,在日常的开发过程中,我们需要尽可能少的打印日志,同时避免重复的日志打印,比如前文打印了ABC,后文数据解析后又打印B,这完全没必要。但是注意,一些核心服务以及中间件的出入参日志需要保留。

总结

线上操作需谨慎,涉及配置调整要多人check再执行,操作后发现问题及时回滚。对于复杂结构的日志不要全文打印,关注核心信息即可。日志级别修改可采用一定的灰度策略,以减少故障影响。

http://www.lryc.cn/news/532838.html

相关文章:

  • FPGA实现SDI视频缩放转UltraScale GTH光口传输,基于GS2971+Aurora 8b/10b编解码架构,提供2套工程源码和技术支持
  • 二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号
  • 利用 Python 爬虫获取按关键字搜索淘宝商品的完整指南
  • 什么是幂等性
  • 群晖NAS如何通过WebDAV和内网穿透实现Joplin笔记远程同步
  • 示例:JAVA调用deepseek
  • 【提示工程】:如何有效与大语言模型互动
  • 操作系统—经典同步问题
  • profinet工业通信协议网关:提升钢铁冶炼智能制造效率的利器
  • Vue基础:计算属性(描述依赖响应式状态的复杂逻辑)
  • leetcode:1534. 统计好三元组(python3解法)
  • BUU27 [SUCTF 2019]CheckIn1
  • unity学习30:Audio Source, Audio clip 音效和音乐
  • 【Qt 常用控件】输入类控件1(QLineEdit和QTextEdit 输入框)
  • openEuler22.03LTS系统升级docker至26.1.4以支持启用ip6tables功能
  • 深入解析:如何利用 Java 爬虫按关键字搜索淘宝商品
  • STM32上部署AI的两个实用软件——Nanoedge AI Studio和STM32Cube AI
  • C++ Primer 成员访问运算符
  • 芯科科技的BG22L和BG24L带来应用优化的超低功耗蓝牙®连接
  • java后端开发面试常问
  • ‌双非硕士的抉择:自学嵌入式硬件开发还是深入Linux C/C++走软开?
  • Windows系统使用Git教程详解
  • Linux firewalld开启日志审计功能(2)
  • 【声音转文字CapsWriter】声音随时转化为文字,CapsWriter提高工作效率
  • 深入理解小波变换:信号处理的强大工具
  • 人机交互系统实验三 多通道用户界面
  • Filter -> MaskFilter遮罩滤镜详解
  • RK3568使用QT操作LED灯
  • python学opencv|读取图像(五十七)使用cv2.bilateralFilter()函数实现图像像素双边滤波处理
  • 为何实现大语言模型的高效推理以及充分释放 AI 芯片的计算能力对于企业级落地应用来说,被认为具备显著的研究价值与重要意义?