集群重启后 30 秒再次崩溃:凶手不是重连风暴,是日志

发布时间:2026/11/3 8:55:06

集群重启后 30 秒再次崩溃:凶手不是重连风暴,是日志 集群重启后 30 秒再次崩溃凶手不是重连风暴是日志晚上十点监控告警群炸了EMQX 集群 CPU 打满。那时我们平台的在线设备在几十万量级挂在 2 个 EMQX 节点后面。这种量级的集群日常 CPU 水位并不高突然打满只有一种解释出事了。但真正的故事不是这次崩溃而是半小时后的第二次崩溃——我们把集群重启起来不到 30 秒它又躺下了。事后复盘打垮集群的不是几十万台设备的重连风暴。凶手是一行配置日志等级。一、事故经过两次崩溃第一次崩溃来得没什么征兆。没有发版没有配置变更设备量也没有异常波动。CPU 从正常水位一路爬升到打满消息开始大量堆积然后集群失去响应。运维的第一反应是标准动作重启。集群起来了。设备开始重连。然后几十万台设备同时涌回来的那一刻集群再次崩溃——从重启完成到第二次躺平大约 30 秒。如果你做过设备接入对重连风暴这个词不会陌生长连接集群最怕的不是稳态流量而是全量设备在同一时刻回来。但这一次风暴只是压死骆驼的最后一根稻草——而且骆驼的背上早就被我们自己放了一块石头。二、排查一条误导性线索一个关键排除法【配图 1平台链路图】几十万台智能家电设备负载均衡EMQX 节点 1EMQX 节点 2业务微服务数据库上监控平台看数据第一个异常很醒目磁盘 IOPS 打满。当时的推理链是这样的IOPS 高 → 是不是消息量太大→ 看 EMQX果然堆积了大量消息。逻辑似乎闭环了消息洪峰 → 写盘压力 → IOPS 打满 → CPU 占死。这是本次排查中最大的误导性线索。消息堆积是真实存在的但它是结果不是原因。把我们拉出误区的是一个排除法动作去看下游的负载。如果真的是消息量太大把平台压垮了那么压力一定会传导下去——业务微服务应该在疯狂消费数据库应该在疯狂写入。但实际看到的是什么数据库和微服务的 CPU、负载都风平浪静。下游很闲上游却在堆积。结论只有一个瓶颈不在消息太多而在 EMQX 本机处理不动。消息堆积不是洪水是堰塞湖——河道堵了水才涨起来。回到 EMQX 机器本身什么东西在疯狂写磁盘又和消息量无关答案浮出水面日志。debug 级别的日志。三、根因上线初期埋下的定时炸弹时间倒回平台刚上线的时候。设备接入量小排查问题全靠日志为了看得清楚我们把 EMQX 的日志等级开到了 debug。那时候一天没几条日志开着毫无感觉。然后设备量涨上来了。一万、十万、几十万。每一台设备的每一次连接、每一条消息都在 debug 日志里留下一串记录。日志写入量和设备量同步膨胀直到某个晚上磁盘 IOPS 到达极限——写日志把磁盘写满了队列CPU 大量时间耗在 IO 等待上消息处理能力归零堆积崩溃。【配图 2事故因果链】再次打满上线初期开启 debug 日志设备少,无感知设备量涨到几十万日志量同步膨胀磁盘 IOPS 被打满CPU 耗在 IO 等待消息处理停摆消息堆积集群崩溃,第一次运维重启集群几十万设备同时重连触发新的日志洪峰集群崩溃,第二次重启后约 30 秒最讽刺的地方在这里第一次崩溃是日志打垮的第二次崩溃还是日志打垮的。重连风暴本身并不可怕——可怕的不是几十万台设备同时回来而是它们回来的那一刻每一台都在催集群写 debug 日志。重连波峰 × debug 日志 第二次 IOPS 洪峰集群在 30 秒内重蹈覆辙。重启没有解决任何问题反而成了二次事故的开关。四、恢复一道平时像摆设的闸门恢复动作本身简单到不好意思说把 EMQX 日志等级从 debug 调回生产环境该有的水位重启集群这一次几十万台设备的重连波峰来了集群扛住了。扛住的另一个功臣是集群上一直配置着的最大连接数限制。平时它像个摆设——谁会嫌连接多呢但在重连风暴里它成了一道闸门超过阈值的连接被拒绝或排队设备端退避重试重连被自然地摊平到一个时间窗口里而不是在同一秒全部砸进来。【配图 3恢复后的重连过程】否是集群重启完成几十万设备发起重连达到最大连接数阈值?连接建立,正常恢复超出部分被拒绝/排队设备端随机退避后重试波峰被摊平集群稳定恢复五、三个教训1. 上线初期的临时配置是最危险的定时炸弹debug 日志不是错误为了方便排查是正当需求。错的是它没有任何退出机制没有工单、没有期限、没有 checklist 提醒你在设备量上来之后关掉它。所有临时的东西——临时开的日志、临时关的告警、临时放宽的限流——都应该有明确的过期时间。后来我们把日志等级直接写进了生产环境部署 checklist新环境上线必须确认日志等级为生产水位签字画押。2. 重启不是恢复手段没有预案的重启是二次事故的开关长连接集群的重启等于亲手制造一次全量重连。重启之前要回答的问题不是能不能起得来而是起来之后几十万台设备一起回来扛不扛得住。扛不住预案的重启就是亲手按下第二次崩溃的按钮。3. 排查时先分清楚洪水和堰塞湖消息堆积、队列变长、延迟上升——这些都只是水位高了。水位高有两种可能上游来水太大或者下游河道堵了。两者的处置完全相反。一个简单的排除动作就能区分看下游忙不忙。下游很闲而你在堆积就别再盯着流量看了去查自己这台机器。写在最后这次事故没有高深的技术没有内核 bug没有网络分区没有分布式一致性问题。就是一行日志配置加一次没有预案的重启。但也正因为不高深它才值得讲。生产环境里拖垮系统的往往不是你想不到的黑天鹅而是你以为无害的灰犀牛——它从你系统只有几千台设备的那天起就站在角落里等设备量涨上来。【配图 4事故时间线可放文末作总结图】上线初期设备量少开启 debug日志便于排查无感知设备量增长期几十万设备在线日志量同步膨胀隐患累积事故当晚CPU 告警IOPS 打满集群第一次崩溃重启重连风暴叠加日志洪峰30 秒后第二次崩溃恢复调低日志等级最大连接数限流摊平波峰集群恢复事后日志等级写入生产部署checklist事故时间线你在生产环境里踩过临时配置变永久的坑吗评论区聊聊。
延伸阅读

更多相关文章

2026/11/3 4:51:04

Codex 遇到 CI 构建失败怎么办?从日志定位到最小修复的完整流程

摘要本地代码运行正常,提交到仓库后却在 CI 阶段失败,是开发中非常常见的问题。原因可能来自 Node.js 版本、环境变量、依赖锁文件、测试顺序或构建配置。本文介绍如何让 Codex 分阶段分析 CI 日志、定位根因并完成最小范围修复,避免为了让流…

2026/10/27 19:34:12

强化学习在动态出行市场的应用与FCA-RL框架解析

1. 项目概述:当强化学习遇上动态出行市场去年夏天,我和某头部出行平台算法团队的一次深夜讨论让我记忆犹新——他们的动态定价系统在市场突变时总会出现"反应迟钝-过度补偿"的震荡现象。这正是FCA-RL框架要解决的核心问题:如何在网…

2026/11/1 7:11:49

阿里Java手册憋了10个月的大招,新增34条规约直接封神

在过去了距其中上次于阿里发布的《Java 开发手册》而言的十个月之后呀此刻呢又是一次发布而且这次发布增添了例如像是好多这类非常实用能够让人受益的有价值的内容呢就像有新的三十四条被制定出的约规呀还有对描述进行了九十处的改动呢特别是错误码相关规则乃首次拿出了成为完整…

2026/11/3 8:50:28

Python自动化测试实战:从基础到框架精通的10周进阶指南

1. 为什么需要系统学习自动化测试?在当今快速迭代的软件开发环境中,自动化测试已成为保障产品质量的核心手段。我经历过从纯手工测试到自动化测试的转型过程,深刻体会到掌握这项技能对职业发展的重要性。传统手工测试在面对频繁的版本更新时&…

2026/11/3 8:50:28

三维云设计技术:工业设计的云端革新方案

1. 三维云设计技术概述在工业设计领域,SolidWorks、AutoCAD等专业软件长期占据主导地位,但传统本地化部署模式正面临三大核心挑战:首先是硬件投入成本高企,每位设计师都需要配备高性能工作站;其次是数据安全风险加剧&a…

2026/11/3 8:50:28

开源项目管理工具Plane:技术团队的高效替代方案

1. 开源项目管理工具Plane深度解析 最近在GitHub上发现一个名为Plane的开源项目管理工具,经过两周的实测体验,我必须说这可能是2024年最值得关注的开源项目之一。作为一个长期使用Jira、ClickUp等商业工具的团队负责人,Plane给我的第一印象是…

2026/11/3 8:50:28

华为OD机考:或门电路故障的二进制位交换问题解析

1. 问题背景与需求分析 最近在准备华为OD机考时遇到一道关于或门电路故障的有趣题目。题目描述某厂商生产的一批或门电路存在不稳定现象:在计算两个二进制数的或操作时,第一个输入数的某两个比特位会发生随机交换。作为工程师,我们需要计算在…

2026/11/3 8:50:28

端侧AI与智能体编排:从云端租用到端侧自持的技术变革

1. 三条新闻背后的共同信号:AI正在从"云端租用"走向"端侧自持"2026年9月23日这一天,AI圈同时冒出三件事,单看每件都挺炸,但把它们摆在一起看,你会发现一条非常清晰的暗线:AI的能力正在…

2026/11/3 8:45:27

常用概率分布的期望与方差:从公式推导到模型诊断

1. 项目概述:为什么一张表能让你在统计推断中少走三年弯路“常用概率分布及其数学期望和方差”——这看起来像教科书目录里最不起眼的一节,甚至可能是你考前突击时跳过的一页。但我在某高校统计建模实验室带学生做真实项目时反复验证过:92%的…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑