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

发布时间:2026/9/10 6:53:29

集群重启后 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/9/10 6:53:04

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

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

2026/9/6 9:17:10

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

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

2026/9/6 19:14:50

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

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

2026/9/10 6:51:39

CANN/ge测试框架开发指南

测试框架指南 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前…

2026/9/10 6:51:39

LeetCode 85详解:单调栈与动态规划求解最大矩形

1. 先搞清楚题目到底在问什么如果你刷过 LeetCode,大概率经历过这种情况:做完了 84. Largest Rectangle in Histogram,觉得自己掌握了单调栈,然后信心满满地点开 85,结果被这题按在地上摩擦。说实话,我当初…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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