集群重启后 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事故时间线你在生产环境里踩过临时配置变永久的坑吗评论区聊聊。

相关新闻

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

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

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

2026/10/18 6:33:23 阅读更多 →
本地智能自动化平台 OpenClaw 搭建流程 启动校验与指令测试(含安装包)

本地智能自动化平台 OpenClaw 搭建流程 启动校验与指令测试(含安装包)

🦞 OpenClaw 本地自动化工具|可视化一键部署,省去环境搭建难题 支持系统:Windows10/11 64 位、macOS12 及以上 当前稳定版本:v2.7.9 核心亮点✨:全程图形化操作,不依赖命令行终端,G…

2026/10/16 7:22:49 阅读更多 →
YOLO标注智能手机屏幕缺陷检测数据集与应用实践

YOLO标注智能手机屏幕缺陷检测数据集与应用实践

1. 智能手机屏幕缺陷检测数据集概述智能手机屏幕缺陷检测是工业质检领域的重要应用场景。随着手机制造工艺的不断提升,屏幕缺陷检测的精度要求也越来越高。传统的人工检测方式效率低下且容易漏检,基于深度学习的自动化检测方案正在逐步取代人工。这个数据…

2026/10/9 4:08:31 阅读更多 →

最新新闻

基于协同过滤的个性化电影推荐研究

基于协同过滤的个性化电影推荐研究

前言今天所阅读的这一个人, 是《电脑知识与技术》这本期刊在2019年的9月份所发表的一篇文章。这篇文章的标题叫做《基于的协同过滤算法的研究与应用实现》, 文章内容是关于协同过滤算法的一个研究与实际应用的呈现。摘要随着科学技术快速地发展, 并且知识产权变得日益重要, 绝大…

2026/10/18 6:33:52 阅读更多 →
Rust重写文字处理内核,开放AI可调用的文档处理库wordcraft实践

Rust重写文字处理内核,开放AI可调用的文档处理库wordcraft实践

最近在 GitHub 上看到一个很有意思的项目,叫 wordcraft,一句话概括就是:用 Rust 重写了一套兼容主流文档格式的文字处理内核,并且把编辑能力以库和接口的形式开放出来,让 AI Agent 可以直接调用。这个方向的想象力很大…

2026/10/18 6:33:52 阅读更多 →
Claude Code权限配置实战:用启动参数与规则告别确认弹窗,实现批量重构自动化

Claude Code权限配置实战:用启动参数与规则告别确认弹窗,实现批量重构自动化

用 Claude Code 做批量重构之前,我以为最大的成本是模型“理不理解需求”。真正上手之后才发现,成本是终端里一个接一个的确认弹窗:改一个文件弹一次,跑一条命令再弹一次,有时候同一个操作还会被拆成两次确认。本来是几…

2026/10/18 6:33:52 阅读更多 →
OpenClaw龙虾养殖指南精读:参数化养殖与水质管理实操

OpenClaw龙虾养殖指南精读:参数化养殖与水质管理实操

简介:面向AI从业者、开发者和普通用户的OpenClaw入门指南,以2026年初爆火的开源自主智能体项目为对象,系统讲解其产品定位、出圈原因、整体架构、Agent调度层、通讯层、记忆系统、技能工具链与运行流程,并覆盖国内平替、安全挑战和…

2026/10/18 6:33:52 阅读更多 →
Python 如何统一处理不同复权方式的 K 线?从 Pandas 数据处理到 QuantDash API 实战

Python 如何统一处理不同复权方式的 K 线?从 Pandas 数据处理到 QuantDash API 实战

一句话结论: 统一处理不同复权方式的 K 线,关键不是简单地把多个 DataFrame 拼在一起,而是明确价格口径、统一数据结构,并确保指标计算和回测使用的价格序列具有一致的复权规则。 摘要 在 Python 量化开发中,同一只股…

2026/10/18 6:33:52 阅读更多 →
跨境电商前端HTML模板:多语言多币种可落地骨架

跨境电商前端HTML模板:多语言多币种可落地骨架

简介:这是一套面向前端初学者与电商项目开发者的跨境电商网站前端模板代码,基于HTMLCSSJS构建,可快速搭建具备商品展示、购物车、响应式布局等基础功能的电商页面。资源共188个文件,包含26个结构清晰的HTML页面、7个核心CSS样式表…

2026/10/18 6:32:52 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/16 14:23:36 阅读更多 →