<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>嵌入式 on Zero Day Notes</title>
        <link>https://blog.5772447.xyz/tags/%E5%B5%8C%E5%85%A5%E5%BC%8F/</link>
        <description>Recent content in 嵌入式 on Zero Day Notes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Thu, 24 Sep 2026 20:32:45 +0800</lastBuildDate><atom:link href="https://blog.5772447.xyz/tags/%E5%B5%8C%E5%85%A5%E5%BC%8F/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>清除 嵌入式 隐患：一次高危配置清剿实录</title>
            <link>https://blog.5772447.xyz/posts/46e5c54c/</link>
            <pubDate>Thu, 24 Sep 2026 20:32:45 +0800</pubDate>
            <guid>https://blog.5772447.xyz/posts/46e5c54c/</guid>
            <description>&lt;h2 id=&#34;问题背景&#34;&gt;&lt;a href=&#34;#%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;问题背景&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;在生产环境中，嵌入式 相关的故障往往具有突发性、隐蔽性和连锁反应强的特点。本次故障发生在核心业务系统高峰期，影响范围覆盖多个业务模块，故障持续时间约 4 小时，造成了较为严重的业务影响。&lt;/p&gt;&#xA;&lt;p&gt;作为运维团队的一员，我全程参与了此次故障的排查、定位、修复与复盘。整个过程暴露了我们在监控覆盖、变更管理、应急预案等方面的多处短板，也促使我们对 嵌入式 相关的运维体系进行了系统性改进。&lt;/p&gt;&#xA;&lt;p&gt;本文将完整还原故障现场、排查思路、根因定位及后续改进措施，希望能为同行提供参考。&lt;/p&gt;&#xA;&lt;h2 id=&#34;故障现象&#34;&gt;&lt;a href=&#34;#%e6%95%85%e9%9a%9c%e7%8e%b0%e8%b1%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;故障现象&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;故障发生时，业务监控大屏首先出现多条告警：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;核心接口响应时间从 200ms 骤升至 15s+&lt;/li&gt;&#xA;&lt;li&gt;数据库连接池耗尽，部分应用节点出现大量超时&lt;/li&gt;&#xA;&lt;li&gt;用户反馈页面加载缓慢或直接报错&lt;/li&gt;&#xA;&lt;li&gt;内部运维工具（如堡垒机、日志平台）也出现访问异常&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;初步检查发现，问题并非单一节点故障，而是呈现出明显的级联效应。多个子系统几乎同时出现性能下降，日志中充斥着各种超时、重试、连接拒绝的错误信息。&lt;/p&gt;&#xA;&lt;p&gt;更令人困惑的是，系统资源监控（CPU、内存、磁盘）并未出现明显异常，这排除了简单的资源耗尽类故障。&lt;/p&gt;&#xA;&lt;h2 id=&#34;排查过程&#34;&gt;&lt;a href=&#34;#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;排查过程&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;第一阶段：定位故障域&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;首先通过负载均衡器日志确认了请求分布异常。部分后端节点响应极慢，而其他节点正常，初步判断是局部节点或链路问题。&lt;/p&gt;&#xA;&lt;p&gt;使用 &lt;code&gt;tcpdump&lt;/code&gt; 抓包发现，异常节点与数据库之间的 TCP 连接存在大量重传和 RST 包。进一步使用 &lt;code&gt;ss -tan&lt;/code&gt; 查看发现，部分节点处于 &lt;code&gt;TIME_WAIT&lt;/code&gt; 状态的连接数异常高。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第二阶段：深入数据库层&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;登录数据库服务器，执行 &lt;code&gt;show processlist&lt;/code&gt; 发现大量 &lt;code&gt;Sleep&lt;/code&gt; 状态连接，且部分连接已持续数小时未释放。执行 &lt;code&gt;SHOW ENGINE INNODB STATUS&lt;/code&gt; 发现存在死锁和锁等待链。&lt;/p&gt;&#xA;&lt;p&gt;使用 &lt;code&gt;pt-query-digest&lt;/code&gt; 分析慢日志，发现一条此前从未出现过的全表扫描 SQL，执行时间超过 30 秒，且并发执行时触发了锁竞争风暴。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第三阶段：代码与配置审计&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;回溯变更记录，发现前一天的例行发布中，一位开发同学在 ORM 配置中误将连接池大小从 50 调整为 200，且未做压测验证。同时，应用启动脚本中 &lt;code&gt;spring.datasource.hikari.maximum-pool-size&lt;/code&gt; 配置被覆盖为默认值。&lt;/p&gt;&#xA;&lt;p&gt;使用 &lt;code&gt;git diff&lt;/code&gt; 确认了配置漂移，使用 &lt;code&gt;jstack&lt;/code&gt; 抓取应用线程栈，发现大量线程阻塞在数据库连接获取上。&lt;/p&gt;&#xA;&lt;h2 id=&#34;解决方案&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解决方案&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;立即止血&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;紧急回滚 ORM 配置，将连接池大小恢复为 50&lt;/li&gt;&#xA;&lt;li&gt;重启异常应用节点，释放僵尸连接&lt;/li&gt;&#xA;&lt;li&gt;在数据库层执行 &lt;code&gt;KILL&lt;/code&gt; 命令清理长时间空闲连接&lt;/li&gt;&#xA;&lt;li&gt;临时调大 &lt;code&gt;max_connections&lt;/code&gt; 参数，恢复业务访问&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;根治措施&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;修复配置管理：将连接池参数纳入配置中心统一管理，禁止硬编码&lt;/li&gt;&#xA;&lt;li&gt;增加变更审批：所有涉及连接池、超时时间的配置变更必须经过运维评审&lt;/li&gt;&#xA;&lt;li&gt;完善监控：增加连接池使用率、慢查询实时告警&lt;/li&gt;&#xA;&lt;li&gt;演练预案：制定数据库连接池耗尽的应急手册，定期演练&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;根因分析&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e5%9b%a0%e5%88%86%e6%9e%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根因分析&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;直接原因&lt;/strong&gt;：开发同学误调连接池参数，导致应用在高峰期瞬间创建大量数据库连接，超过数据库 &lt;code&gt;max_connections&lt;/code&gt; 限制，触发连接拒绝和锁竞争。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;深层原因&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;缺乏配置变更的强制评审机制&lt;/li&gt;&#xA;&lt;li&gt;缺少生产环境压测环节&lt;/li&gt;&#xA;&lt;li&gt;监控覆盖不全，未及时发现连接池水位异常&lt;/li&gt;&#xA;&lt;li&gt;应急预案缺失，导致恢复时间过长&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;预防措施&#34;&gt;&lt;a href=&#34;#%e9%a2%84%e9%98%b2%e6%8e%aa%e6%96%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;预防措施&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;配置即代码&lt;/strong&gt;：所有配置变更走 GitOps 流程，自动触发评审和压测&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;监控全覆盖&lt;/strong&gt;：连接池使用率、慢查询、锁等待、连接拒绝率全部纳入黄金指标&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;变更冻结期&lt;/strong&gt;：业务高峰期（9:00-18:00）禁止非紧急变更&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;定期演练&lt;/strong&gt;：每季度执行一次连接池耗尽演练，验证应急手册有效性&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;知识库建设&lt;/strong&gt;：将本次故障复盘写入团队 Wiki，供新人学习&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总结&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;本次 嵌入式 故障的排查与修复，暴露了我们在变更管理、监控体系、应急响应等方面的不足。通过完整的故障复盘，我们建立了更严格的配置变更流程、更全面的监控告警、更实用的应急预案。&lt;/p&gt;&#xA;&lt;p&gt;故障是最好的老师。希望本文能帮助同行少走弯路，构建更健壮的生产系统。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;延伸阅读&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/xxx/&#34; &gt;记一次 Kubernetes 因 liveness 探针配置过严导致 Pod 陷入 CrashLoopBackOff 的排查&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/xxx/&#34; &gt;内网服务器为何频频出现来源不明的免密 SSH 登录？一次 authorized_keys 后门排查实录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
