实用指南:双 11 预演:系统吞吐量跌至 0!一次由 Log4j 锁竞争引发的线程“集体猝死”

news/2026/1/22 19:03:17/文章来源:https://www.cnblogs.com/tlnshuju/p/19518703

实用指南:双 11 预演:系统吞吐量跌至 0!一次由 Log4j 锁竞争引发的线程“集体猝死”

2026-01-22 18:49  tlnshuju  阅读(0)  评论(0)    收藏  举报

写在前面:

距离双 11 还有不到两周,全链路压测正在紧张进行。

就在流量攀升到平时峰值 5 倍的那个瞬间,没有任何报错,没有任何异常抛出,我们的核心交易系统 TPS 直接归零

就像是有人拔掉了服务器的电源,但进程却还活着。

排查结果让人大跌眼镜:搞垮整个集群的,不是数据库慢 SQL,也不是 Redis 击穿,而是为了排查问题而留下的那几行 log.info()


01. 诡异的“心电图拉直”

晚上 22:00,第三轮全链路压测启动。
流量通过网关涌入,监控大盘上的曲线漂亮地上扬。所有人都盯着数据库连接池和 CPU 负载。

22:15,流量达到预设顶峰。
突然,业务监控大屏上的“订单创建量”瞬间跌至 0。
不是下降,是垂直归零

我立刻切到服务器监控:

  • CPU: 从 60% 骤降到 1%(意味着线程不干活了)。
  • Load Average: 飙升到 100+(意味着大量线程在排队等待)。
  • Memory: 平稳。
  • GC: 无 Full GC。

“服务僵死了。” 这是我的第一反应。应用进程还在,端口也是通的,但就是不处理任何请求。

![Image: 监控大盘截图。上半部分是 QPS 曲线,在最高点突然垂直掉到底部变成直线;下半部分是 System Load 曲线,与 QPS 相反,瞬间飙升并爆表]
(图1:这哪里是压测,简直是断电)


02. 现场取证:jstack 里的“停尸房”

既然进程还活着,别瞎猜,直接 dump 线程栈。

jstack -l <pid> > thread_dump.log

打开文件的一刹那,我倒吸一口凉气。
整个文件里有 200 个 Dubbo 业务线程,状态全都是 BLOCKED

它们整整齐齐地排在同一个对象监视器(Monitor)后面,像极了早高峰堵死的立交桥。

凶手显形:

"DubboServerHandler-192.168.1.100-20880-thread-150" #150 ... state: BLOCKED
- waiting to lock <0x0000000780a000b0> (a org.apache.log4j.spi.RootLogger)at org.apache.log4j.Category.callAppenders(Category.java:204)at org.apache.log4j.Category.forcedLog(Category.java:391)at org.apache.log4j.Category.info(Category.java:666)at com.company.order.service.OrderServiceImpl.createOrder(OrderServiceImpl.java:88)

看到 org.apache.log4j.Category.callAppenders,我瞬间明白了。


03. 根因剖析:该死的 synchronized

这是一个老系统,用的是古老的 Log4j 1.x(注意,不是 Log4j2)。

在 Log4j 1.x 的源码设计中,为了保证日志写入的线程安全,RootLogger 在分发日志事件(Event)时,用了一把重量级的同步锁

// Log4j 1.x 源码片段
public void callAppenders(LoggingEvent event) {
int writes = 0;
// 灾难之源:同步锁
synchronized(this) {
for(Category c = this; c != null; c = c.parent) {
// ... 循环调用 Appender 写入磁盘
}
}
}

为什么平时没事,压测就炸了?

  1. IO 瓶颈: 压测时日志量激增,磁盘 IO 写入变慢(尤其是云盘 IOPS 被打满时)。
  2. 串行化: 由于 synchronized(this) 的存在,所有试图打印日志的业务线程,必须排队
  3. 多米诺骨牌:
    • 线程 A 抢到锁,开始写日志,但磁盘慢,写了 10ms。
    • 这 10ms 内,线程 B、C、D… 到线程 Z 全部堵在 synchronized 外面。
    • 线程 A 释放锁,线程 B 抢到,又卡了 10ms。
    • 随着请求源源不断进来,线程池瞬间被占满,所有线程都在等这把“日志锁”。

结果: 整个系统因为一句 log.info,退化成了单线程运行,吞吐量自然跌至 0。

![Image: 线程阻塞示意图。左边是宽阔的“业务高速公路”,右边是一个标着 “Log4j Lock” 的单人独木桥。几百辆车(线程)挤在桥头动弹不得]
(图2:所谓的“高性能并发”,最后都死在了“串行写日志”上)


04. 极速止血与彻底根治

黄金 5 分钟止血

在压测现场,改代码重发版来不及了。我们利用配置中心(Apollo/Nacos)动态调整了日志级别:

rootLogger.levelINFO 调整为 ERROR

配置下发的瞬间,锁竞争消失,QPS 像火箭一样直接窜回了 5 万。

彻底根治方案

复盘会上,我们确定了两个改造方向:

方案一:使用 AsyncAppender(异步日志)
不要让业务线程傻傻地等磁盘 IO。用一个队列(BlockingQueue)做缓冲,业务线程把日志扔进队列就走人,由独立的 Worker 线程慢慢写磁盘。

方案二:升级 Log4j2(推荐)
Log4j 1.x 已经是时代的眼泪了。Log4j2 引入了 LMAX Disruptor(无锁环形队列)技术,在多线程竞争下的性能是 1.x 的几百倍。

![Image: 性能对比柱状图。Log4j 1.x 的柱子很短,Log4j2 (Async) 的柱子高出天际,标注着 “Throughput x18”]
(图3:Log4j2 的无锁设计简直是降维打击)


05. 资深专家的“避坑指南”

这次事故损失的是 200 万(虚拟)压测数据,但如果发生在双 11 当天,损失的就是真金白银。

关于日志,我有三条铁律:

  1. 生产环境禁止使用 ConsoleAppender
    输出到控制台(System.out)比输出到文件慢得多,而且更容易导致锁竞争。这是新手最容易犯的错。

  2. 日志必须异步(Async)
    别让昂贵的业务线程去干“写磁盘”这种苦力活。

  3. 别在日志里“序列化”大对象
    log.info("Order info: {}", JSON.toJSONString(order))
    这行代码在执行 toJSONString 时会消耗大量 CPU,甚至导致 OOM。请务必判断 if (log.isInfoEnabled()),或者使用占位符。


06. 结语

高并发系统的崩溃,往往不是因为逻辑太复杂,而是因为基础太脆弱。

查一下你们的项目依赖,如果还存在 log4j-1.2.17.jar,请立刻、马上、现在就把它换掉。
别等到双 11 凌晨,让报警电话教你做人。


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

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

相关文章

Claude Skills vs MCP深度解析:AI从“能说“到“能做“的终极进化,看完必收藏!

Claude Skills与MCP是AI技术发展的互补组件。MCP作为统一接口标准&#xff0c;相当于AI世界的USB-C接口&#xff0c;解决了AI工具调用混乱的问题&#xff1b;Skills则提供具体做事方法。MCP负责"能否调用"&#xff0c;Skills负责"如何执行"。两者结合才能实…

深入解析:[鸿蒙2025领航者闯关]: Flutter + OpenHarmony 国际化(i18n)与本地化(L10n)全指南:一套代码,服务全球用户

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

好写作AI:答辩前还在背稿子?你的“专属参谋部”已生成战术方案!

各位即将站上答辩讲台、一想到要被几位教授“学术围攻”就手心冒汗、大脑空白的同学们&#xff0c;是不是感觉比写论文时还要慌&#xff1f;对着镜子练习了八百遍&#xff0c;一开口还是“这个……那个……”&#xff0c;精心准备的PPT在评委的提问面前瞬间变得不堪一击。稳住&…

2026年常州盘式干燥机厂家最新推荐:闪蒸干燥机、流化床干燥机、单锥真空干燥机、真空耙式干燥机、喷雾干燥机、沸腾干燥机、赋能多行业高效干燥新体验

随着工业制造向精细化、绿色化、智能化转型加速,干燥设备作为化工、医药、食品、新能源等领域的核心单元设备,需求持续攀升。2026年,全球环保法规日趋严格,行业对干燥设备的节能效率、物料适配性、智能运维能力提出…

好写作AI:别再拿Word当“学术大脑”了!它和AI之间差了100个百度文库

各位还在用Word“硬写”、拿翻译软件“硬翻”、靠查重网站“硬扛”的论文战士们&#xff0c;抬头看&#xff01;当你的写作工具还停留在“电子笔和纸”的阶段时&#xff0c;一种全新的“学术外挂”已经诞生。今天&#xff0c;我们就来一场赤裸裸的对比&#xff1a;传统写作软件…

基于Java+SpringBoot+SSM旧物回收商城系统(源码+LW+调试文档+讲解等)/二手物品回收平台系统/废旧物品回收商城系统/旧货回收交易系统/旧物回收管理平台/旧物循环利用商城系统

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

相比Ubuntu,CentOS在服务器领域有哪些稳定性优势?

CentOS&#xff08;特别是传统的CentOS 7及之前的版本&#xff09;在服务器领域相比Ubuntu确实有一些稳定性优势&#xff0c;主要体现在以下几个方面&#xff1a; 原文地址&#xff1a;https://blog.phpnode.cn/article/732 1. 更保守的软件包策略 长期支持与稳定性优先&…

机器学习固态电池!

https://mp.weixin.qq.com/s/TN7PkwHCyDf5FRUlf5EzzA 点击此链接查看详情&#xff01; https://mp.weixin.qq.com/s/TN7PkwHCyDf5FRUlf5EzzA 点击此链接查看详情&#xff01;

A实验:AI人工智能悬尾实验视频分析系统 全部资料。

悬尾实验物的尾部进行固定&#xff0c;使其头部向下悬挂&#xff0c;动物在该环境中挣扎&#xff0c;企图摆脱该困境&#xff0c;在经过努力仍无法摆脱后&#xff0c;出现间断性不动&#xff0c;显示“行为绝望”状态。实验动物在该环境中拼命挣扎试图逃跑又无法逃脱&#xff0…

写论文软件哪个好?宏智树 AI 以 “合规 + 深度” 重构学术写作新范式

毕业季来临&#xff0c;AI 论文工具早已不是新鲜事物&#xff0c;但 “生成快却不严谨”“降重易留 AI 痕”“功能散难闭环” 等问题仍困扰着多数学子。作为深耕论文写作科普的教育博主&#xff0c;我结合实测多款工具的体验发现&#xff0c;宏智树 AI&#xff08;官网&#xf…

A实验:AI人工智能强迫游泳实验分析系统

强迫游泳视频分析系统是通过AI赋能深度学习神经网络算法&#xff0c;结合云计算技术&#xff0c;能够快速追踪并分析动物的目标行为。其核心技术包括数据库、算法库、医学指标库等多个方面&#xff0c;这些技术共同构成了全自动化、智能化、高通量的动物精细行为智能检测平台。…

宏智树 AI:文献综述写作 “通关秘籍”,告别 “文献清单” 式写作困境

作为深耕论文写作科普的教育博主&#xff0c;后台每天都被 “文献综述怎么写” 的求助刷屏&#xff1a;“读了上百篇文献&#xff0c;还是理不清研究脉络”“写出来的综述被导师批成‘文献堆砌’”“找不到研究空白&#xff0c;选题毫无创新点”。其实&#xff0c;文献综述的核…

AI 写论文哪个软件最好?测评博主实锤:宏智树 AI 重构毕业论文创作逻辑

作为深耕论文写作科普的教育测评博主&#xff0c;每年毕业季都要帮粉丝实测数十款 AI 论文工具&#xff0c;发现一个扎心真相&#xff1a;多数工具只在 “生成文字” 上做文章&#xff0c;却解决不了毕业论文核心痛点 —— 文献造假、数据空洞、逻辑断裂。直到深度体验宏智树 A…

vccorlib140.dll文件丢失找不到 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

学长亲荐9个AI论文网站,继续教育学生轻松搞定毕业论文!

学长亲荐9个AI论文网站&#xff0c;继续教育学生轻松搞定毕业论文&#xff01; AI 工具如何改变论文写作的未来 在当前的学术环境中&#xff0c;越来越多的继续教育学生开始依赖 AI 工具来提升论文写作效率。这些工具不仅能够帮助学生快速完成初稿、优化语言表达&#xff0c;还…

自考必备10个降AI率工具,高效降AIGC推荐!

自考必备10个降AI率工具&#xff0c;高效降AIGC推荐&#xff01; AI降重工具&#xff1a;自考论文的高效护航者 在自考论文写作过程中&#xff0c;越来越多的学生开始关注“AIGC率”和“查重率”的问题。随着AI生成内容的普及&#xff0c;如何让论文看起来更“人工”&#xf…

自考必备10个降AI率工具,高效降AIGC推荐!

自考必备10个降AI率工具&#xff0c;高效降AIGC推荐&#xff01; AI降重工具&#xff1a;自考论文的高效护航者 在自考论文写作过程中&#xff0c;越来越多的学生开始关注“AIGC率”和“查重率”的问题。随着AI生成内容的普及&#xff0c;如何让论文看起来更“人工”&#xf…

vcomp.dll文件丢失找不到 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

【收藏必备】多智能体架构4大模式选择指南,性能提升90%,附LangChain快速上手

文章探讨了多智能体架构的必要性和四种主要模式&#xff1a;子智能体、技能、移交和路由。研究显示多智能体系统在复杂任务中比单体智能体性能提升90%。不同模式适用于不同场景&#xff1a;子智能体适合多领域并行处理&#xff0c;技能适合单智能体承载专精能力&#xff0c;移交…

[特殊字符] 小白也能会!EhViewer下载安装+使用全攻略,安卓e站漫画神器

&#x1f4f1; 小白也能会&#xff01;EhViewer下载安装使用全攻略&#xff0c;安卓e站漫画神器 宝子们&#xff01;喜欢二次元同人本、漫画的看过来&#xff5e; EhViewer是免费开源的安卓漫画工具&#xff0c;专门用来逛E-Hentai&#xff08;e站&#xff09;&#xff0c;比官…