<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>StartLimitBurst on Zero Day Notes</title>
        <link>https://blog.5772447.xyz/tags/startlimitburst/</link>
        <description>Recent content in StartLimitBurst on Zero Day Notes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Mon, 10 Aug 2026 07:05:00 +0800</lastBuildDate><atom:link href="https://blog.5772447.xyz/tags/startlimitburst/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>刹住systemd重启风暴：一次Restart=always叠加配置错误拖垮整机的排查</title>
            <link>https://blog.5772447.xyz/posts/49b13065/</link>
            <pubDate>Tue, 23 Feb 2021 07:05:00 +0800</pubDate>
            <guid>https://blog.5772447.xyz/posts/49b13065/</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;凌晨 02:40，生产机房一批跑核心 API 与内部网关的 Linux 物理机突然告警：&lt;code&gt;load average&lt;/code&gt; 从日常 2～4 冲到 80 以上，监控 agent 间歇超时，跳板机 SSH 登录要等十几秒才出提示符。业务侧同步反馈：网关 502/504 大面积出现，部分接口偶发能通、大多直接拒连。&lt;/p&gt;&#xA;&lt;p&gt;当晚刚做过一次「小变更」——网关上游的配置中心里，某台 API 机监听端口从 &lt;code&gt;8080&lt;/code&gt; 改到 &lt;code&gt;18080&lt;/code&gt;，并同步改了 systemd 的 unit 覆盖文件。变更窗口短、灰度一台后观测几分钟「进程有起来」，就扩到同角色其余节点。谁也没想到，&lt;strong&gt;配置写错 + &lt;code&gt;Restart=always&lt;/code&gt; 无节制重试&lt;/strong&gt;，会在十几分钟内把整机拖进「重启风暴」：服务永远起不来，CPU、磁盘 I/O、journal 却一起被打满，连排障通道都变慢。&lt;/p&gt;&#xA;&lt;p&gt;这类故障的危险处在于：表象是「机器负载高、像被打爆」，根因却常常是&lt;strong&gt;管控平面（systemd）在合法地、疯狂地、毫无冷却地重拉一个必失败的 unit&lt;/strong&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;ol&gt;&#xA;&lt;li&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;code&gt;connection refused&lt;/code&gt; 与短连接超时并存，不像单纯的慢查询或连接池耗尽。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;主机侧&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;top&lt;/code&gt;/&lt;code&gt;htop&lt;/code&gt; 里 &lt;code&gt;%sy&lt;/code&gt; 与短生命周期进程刷屏，反复出现同名服务二进制一闪而过。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;load average&lt;/code&gt; 1/5/15 分钟全线飙高，但单进程 CPU 并不持久占高——典型的「大量短命进程 + 上下文切换」。&lt;/li&gt;&#xA;&lt;li&gt;根分区写入猛增：&lt;code&gt;/var/log/journal&lt;/code&gt; 或 rsyslog 落盘的服务日志在几分钟内暴涨数 GB。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;systemctl status xxx.service&lt;/code&gt; 显示 &lt;code&gt;activating (auto-restart)&lt;/code&gt;，Active 在 &lt;code&gt;failed&lt;/code&gt; 与重启间隙来回跳。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;控制面侧&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;journalctl -u xxx.service -f&lt;/code&gt; 几乎刷不完：&lt;code&gt;Failed with result &#39;exit-code&#39;&lt;/code&gt;、&lt;code&gt;Scheduled restart job&lt;/code&gt; 成对出现，间隔往往只有 100ms 量级。&lt;/li&gt;&#xA;&lt;li&gt;SSH 可登但卡顿；&lt;code&gt;systemctl&lt;/code&gt; 本身偶发变慢，因为 dbus/systemd 也在被重启风暴挤占。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;时间线特征&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;告警与变更完成时间高度吻合（扩到全量后 5～15 分钟）。&lt;/li&gt;&#xA;&lt;li&gt;回滚应用配置不一定立刻降负载——&lt;strong&gt;只要 unit 仍在 auto-restart，风暴就还在转&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&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;h3 id=&#34;1-先分清被打还是自己打自己&#34;&gt;&lt;a href=&#34;#1-%e5%85%88%e5%88%86%e6%b8%85%e8%a2%ab%e6%89%93%e8%bf%98%e6%98%af%e8%87%aa%e5%b7%b1%e6%89%93%e8%87%aa%e5%b7%b1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 先分清「被打」还是「自己打自己」&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;第一反应是 DDoS 或上游重试风暴。快速核对：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;出口/入口网卡 PPS 与连接跟踪：有升高，但远不到历史攻击水位。&lt;/li&gt;&#xA;&lt;li&gt;本机 &lt;code&gt;ss -s&lt;/code&gt;/&lt;code&gt;conntrack -C&lt;/code&gt;：未出现本地端口耗尽或 conntrack 打满那类经典网络型告警。&lt;/li&gt;&#xA;&lt;li&gt;同网段未变更机器正常——&lt;strong&gt;故障与「刚改 unit 的角色」强相关&lt;/strong&gt;，更像本机自激。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;结论：优先查本机进程生命周期与 systemd 单元状态，而不是先扩容、先限流。&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-锁定刷屏的单元&#34;&gt;&lt;a href=&#34;#2-%e9%94%81%e5%ae%9a%e5%88%b7%e5%b1%8f%e7%9a%84%e5%8d%95%e5%85%83&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 锁定「刷屏」的单元&#xD;&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;6&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;7&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 谁在反复失败&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl --failed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;journalctl -p err -b --no-pager | tail -n &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 看哪个 unit 重启最勤&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;journalctl -b -u &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;api-gateway.service&amp;#39;&lt;/span&gt; --no-pager | tail -n &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl show api-gateway.service -p ActiveState -p SubState -p NRestarts -p Result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;关键字段：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;NRestarts&lt;/code&gt; 已经是几千甚至上万。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SubState=auto-restart&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Result=exit-code&lt;/code&gt; 或 &lt;code&gt;start-limit-hit&lt;/code&gt;（若已撞上限制；本批机器&lt;strong&gt;没配限制&lt;/strong&gt;，所以只见无限 auto-restart）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;再配合：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ps -eo pid,ppid,stat,lstart,cmd --sort&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;start_time | tail&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 或&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemd-cgtop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;能看到同二进制的大量僵尸/极短寿命子进程，父进程链最终回到 &lt;code&gt;systemd&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-读清为什么起不来而不是只看-restart&#34;&gt;&lt;a href=&#34;#3-%e8%af%bb%e6%b8%85%e4%b8%ba%e4%bb%80%e4%b9%88%e8%b5%b7%e4%b8%8d%e6%9d%a5%e8%80%8c%e4%b8%8d%e6%98%af%e5%8f%aa%e7%9c%8b-restart&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 读清「为什么起不来」——而不是只看 Restart&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;服务日志里反复出现（示例）：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;error: bind: address already in use&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 或&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;error: config: listen_port: invalid value &amp;#34;&amp;#34; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# 或&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FATAL: cannot open /etc/api/app.yaml: no such file or directory&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;本轮根因落地到 &lt;strong&gt;drop-in 覆盖写错&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl cat api-gateway.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# /etc/systemd/system/api-gateway.service.d/override.conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;变更本意：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Service]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Environment&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;LISTEN_PORT=18080&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExecStart&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExecStart&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/usr/local/bin/api-gateway --config /etc/api/app.yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;实际写成了：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Service]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Environment&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;LISTEN_PORT=18080&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 错误：清空了 ExecStart 后，新命令少了关键参数；或 WorkingDirectory/配置路径笔误&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExecStart&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExecStart&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/usr/local/bin/api-gateway --config /etc/api/app.ya ml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;配置文件路径笔误 / YAML 非法后，进程&lt;strong&gt;启动即非 0 退出&lt;/strong&gt;。应用本身没进入 listen 阶段，健康检查当然全红。&lt;/p&gt;&#xA;&lt;p&gt;另有一台更隐蔽：端口改到 18080，但 &lt;strong&gt;旧进程未停干净&lt;/strong&gt; 或 &lt;strong&gt;socket 单元仍占用&lt;/strong&gt;，新进程 &lt;code&gt;bind&lt;/code&gt; 失败，同样秒退。表现与「配置文件坏了」在 systemd 层完全一致——都是 start 失败 + 自动拉起。&lt;/p&gt;&#xA;&lt;h3 id=&#34;4-为何一台配置错会变成整机打满&#34;&gt;&lt;a href=&#34;#4-%e4%b8%ba%e4%bd%95%e4%b8%80%e5%8f%b0%e9%85%8d%e7%bd%ae%e9%94%99%e4%bc%9a%e5%8f%98%e6%88%90%e6%95%b4%e6%9c%ba%e6%89%93%e6%bb%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;4. 为何一台配置错会变成「整机打满」&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;核对 unit 默认策略：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl show api-gateway.service &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -p Restart -p RestartSec -p StartLimitIntervalUSec -p StartLimitBurst -p StartLimitAction&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;现场读数（问题模式）：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;项&lt;/th&gt;&#xA;          &lt;th&gt;值&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Restart&lt;/td&gt;&#xA;          &lt;td&gt;always&lt;/td&gt;&#xA;          &lt;td&gt;任何退出都重启，含配置错误&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;RestartSec&lt;/td&gt;&#xA;          &lt;td&gt;100ms（或默认很短）&lt;/td&gt;&#xA;          &lt;td&gt;失败后几乎立刻再拉&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;StartLimitBurst&lt;/td&gt;&#xA;          &lt;td&gt;0 / 未生效&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;没有滑动窗口熔断&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;StartLimitAction&lt;/td&gt;&#xA;          &lt;td&gt;none&lt;/td&gt;&#xA;          &lt;td&gt;触顶也不停&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;于是形成正反馈：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;ExecStart 必失败 → 进程秒退&lt;/li&gt;&#xA;&lt;li&gt;systemd 记一次失败并 &lt;code&gt;auto-restart&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;100ms 后再 start → 再失败&lt;/li&gt;&#xA;&lt;li&gt;每次失败写 journal、写应用日志、fork/exec、安全模块检查……&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CPU、磁盘、日志子系统先于业务被拖死&lt;/strong&gt;，排障变慢，窗口越拖越长&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这与「应用逻辑死循环占 CPU」不同：这里是 &lt;strong&gt;PID 1 的策略在放大一次变更事故&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;5-与其他负载高故障的快速鉴别&#34;&gt;&lt;a href=&#34;#5-%e4%b8%8e%e5%85%b6%e4%bb%96%e8%b4%9f%e8%bd%bd%e9%ab%98%e6%95%85%e9%9a%9c%e7%9a%84%e5%bf%ab%e9%80%9f%e9%89%b4%e5%88%ab&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;5. 与其他「负载高」故障的快速鉴别&#xD;&#xA;&lt;/h3&gt;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;表象&lt;/th&gt;&#xA;          &lt;th&gt;更像&lt;/th&gt;&#xA;          &lt;th&gt;一眼区别&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;NRestarts 暴涨 + auto-restart&lt;/td&gt;&#xA;          &lt;td&gt;systemd 重启风暴&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;systemctl show -p NRestarts&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;单 Java 进程 CPU 100%&lt;/td&gt;&#xA;          &lt;td&gt;代码/GC/死循环&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;top&lt;/code&gt; 稳定同一 PID&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Too many open files&lt;/td&gt;&#xA;          &lt;td&gt;fd 泄漏&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;lsof&lt;/code&gt;/&lt;code&gt;/proc/pid/fd&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;本地端口耗尽&lt;/td&gt;&#xA;          &lt;td&gt;短连接打满&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;ss -s&lt;/code&gt;、EADDRNOTAVAIL&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;journal 涨、服务本身正常&lt;/td&gt;&#xA;          &lt;td&gt;日志级别/访问日志&lt;/td&gt;&#xA;          &lt;td&gt;unit 稳定 active (running)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;本轮三项同时命中：&lt;code&gt;NRestarts&lt;/code&gt; 疯狂涨、服务从未 stable running、journal 与变更同窗暴涨。&lt;/p&gt;&#xA;&lt;h3 id=&#34;6-变更链核实&#34;&gt;&lt;a href=&#34;#6-%e5%8f%98%e6%9b%b4%e9%93%be%e6%a0%b8%e5%ae%9e&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;6. 变更链核实&#xD;&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;GitOps/配置仓库：override 与配置中心端口一致，但 &lt;strong&gt;主机上 &lt;code&gt;systemctl daemon-reload&lt;/code&gt; 后的实际 cat 与仓库有一行不可见字符/换行差异&lt;/strong&gt;（或人工在机上「临时改一下」未回写）。&lt;/li&gt;&#xA;&lt;li&gt;灰度判定失误：只看了 &lt;code&gt;systemctl start&lt;/code&gt; 返回和进程表「闪过」，&lt;strong&gt;没等 ActiveState=active (running) 且端口 listen&lt;/strong&gt;，也没看 &lt;code&gt;NRestarts&lt;/code&gt; 是否为 0。&lt;/li&gt;&#xA;&lt;li&gt;监控缺项：有进程存活/端口拨测，但 &lt;strong&gt;没有「unit 重启次数」与「StartLimit 触顶」告警&lt;/strong&gt;，风暴在业务大面积 5xx 前已转了几分钟。&lt;/li&gt;&#xA;&lt;/ul&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;h3 id=&#34;止血按顺序越前面越快降负载&#34;&gt;&lt;a href=&#34;#%e6%ad%a2%e8%a1%80%e6%8c%89%e9%a1%ba%e5%ba%8f%e8%b6%8a%e5%89%8d%e9%9d%a2%e8%b6%8a%e5%bf%ab%e9%99%8d%e8%b4%9f%e8%bd%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;止血（按顺序，越前面越快降负载）&#xD;&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;立刻停掉自动拉起（治标，但必须先做）&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl stop api-gateway.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl mask api-gateway.service   &lt;span style=&#34;color:#75715e&#34;&gt;# 防手工/依赖再次拉起；确认后可 unmask&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 或临时：&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl set-property api-gateway.service Restart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;no   &lt;span style=&#34;color:#75715e&#34;&gt;# 若支持；否则改 drop-in 后 daemon-reload&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;对已经 &lt;code&gt;auto-restart&lt;/code&gt; 的风暴，&lt;code&gt;stop&lt;/code&gt; 比继续改配置更重要——&lt;strong&gt;先让 systemd 停止 fork&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;确认负载下降&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl show api-gateway.service -p NRestarts -p ActiveState&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;uptime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;journalctl -u api-gateway.service -f   &lt;span style=&#34;color:#75715e&#34;&gt;# 应不再刷 Scheduled restart&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;修正配置后再受控启动&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;修正 &lt;code&gt;override.conf&lt;/code&gt; / 应用 YAML / 端口占用（&lt;code&gt;ss -lntp | grep 18080&lt;/code&gt;）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;systemctl daemon-reload&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;systemctl unmask api-gateway.service&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;先单台&lt;/strong&gt; &lt;code&gt;systemctl start&lt;/code&gt;，确认：&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl is-active api-gateway.service    &lt;span style=&#34;color:#75715e&#34;&gt;# active&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ss -lntp | grep &lt;span style=&#34;color:#ae81ff&#34;&gt;18080&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl show api-gateway.service -p NRestarts   &lt;span style=&#34;color:#75715e&#34;&gt;# 启动后应保持 0 或不飙&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -sS -o /dev/null -w &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;%{http_code}\n&amp;#39;&lt;/span&gt; http://127.0.0.1:18080/healthz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&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;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;日志磁盘&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;若 journal 撑满根分区：按规范 &lt;code&gt;journalctl --vacuum-size=&lt;/code&gt; 或清理应用错误日志（&lt;strong&gt;先 stop 风暴再清理&lt;/strong&gt;，否则边清边写）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;根治配置模板写进角色-baseline&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e6%b2%bb%e9%85%8d%e7%bd%ae%e6%a8%a1%e6%9d%bf%e5%86%99%e8%bf%9b%e8%a7%92%e8%89%b2-baseline&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根治配置模板（写进角色 baseline）&#xD;&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;15&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;16&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Unit]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 滑动窗口内启动次数熔断，避免配置错误打满机器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;StartLimitIntervalSec&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;300&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;StartLimitBurst&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Service]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;simple&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Restart&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;on-failure&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 不要无脑 always；若必须 always，务必更长 RestartSec + StartLimit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;RestartSec&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 失败触顶后进入 failed，而不是无限打转&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# StartLimitAction=none 保持 failed 便于告警；或 reboot 仅限无状态节点且你真想自动重启整机&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 可选：资源顶栏，防止单服务拖死整机&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CPUQuota&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;200%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;MemoryMax&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;4G&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;要点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;Restart=always&lt;/code&gt; 不等于高可用&lt;/strong&gt;；配置错误、依赖未就绪时它是自攻击。优先 &lt;code&gt;on-failure&lt;/code&gt;，并对「正常退出码」语义定义清楚（&lt;code&gt;SuccessExitStatus=&lt;/code&gt;）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;RestartSec&lt;/code&gt; 至少秒级&lt;/strong&gt;，给依赖与排障留呼吸空间。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;StartLimitIntervalSec&lt;/code&gt; + &lt;code&gt;StartLimitBurst&lt;/code&gt; 是重启风暴的安全带&lt;/strong&gt;，默认不配等于裸奔。&lt;/li&gt;&#xA;&lt;li&gt;变更后验收清单必须包含：&lt;code&gt;ActiveState&lt;/code&gt;、&lt;code&gt;listen&lt;/code&gt; 端口、&lt;code&gt;NRestarts&lt;/code&gt;、健康检查连续成功 N 次——而不是「进程列表里看见过」。&lt;/li&gt;&#xA;&lt;/ul&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;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;直接原因&lt;/strong&gt;&lt;br&gt;&#xA;unit / 应用配置错误（路径笔误、端口冲突、环境变量未生效）导致进程启动即退出，服务从未进入稳定 &lt;code&gt;running&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;放大原因&lt;/strong&gt;&lt;br&gt;&#xA;&lt;code&gt;Restart=always&lt;/code&gt; + 极短 &lt;code&gt;RestartSec&lt;/code&gt; + &lt;strong&gt;无 StartLimit&lt;/strong&gt;，使 systemd 以极高频率反复 fork/exec 同一失败路径，CPU、日志 I/O、磁盘被合法管控动作打满，形成「重启风暴」。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;过程原因&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;灰度验收只看「有没有进程/命令是否返回」，不看 unit 稳态与重启计数。&lt;/li&gt;&#xA;&lt;li&gt;监控缺少 &lt;code&gt;systemd unit NRestarts&lt;/code&gt; / &lt;code&gt;ActiveState!=active&lt;/code&gt; 的及时告警。&lt;/li&gt;&#xA;&lt;li&gt;变更把「端口/路径」与「重启策略」视为无关项，未评估失败路径下的控制面行为。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;本质&lt;/strong&gt;&lt;br&gt;&#xA;高可用策略（自动拉起）在&lt;strong&gt;不可恢复的配置错误&lt;/strong&gt;上没有熔断，把应用故障升级成主机级可用性事故。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&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;&#xA;&lt;p&gt;&lt;strong&gt;Unit 基线强制带熔断&lt;/strong&gt;&lt;br&gt;&#xA;所有生产 service 模板审查：&lt;code&gt;Restart&lt;/code&gt; 语义、&lt;code&gt;RestartSec&lt;/code&gt;、&lt;code&gt;StartLimit*&lt;/code&gt;、必要时 &lt;code&gt;CPUQuota&lt;/code&gt;/&lt;code&gt;MemoryMax&lt;/code&gt;。禁止裸 &lt;code&gt;Restart=always&lt;/code&gt; 无 StartLimit 上线。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;变更验收 Checklist（发布门禁）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;code&gt;systemctl cat&lt;/code&gt; 与仓库一致，&lt;code&gt;daemon-reload&lt;/code&gt; 已执行&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;code&gt;ActiveState=active&lt;/code&gt; 且持续 ≥ 1～2 分钟&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 端口 &lt;code&gt;LISTEN&lt;/code&gt; 与配置端口一致&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;code&gt;NRestarts&lt;/code&gt; 在观察窗内不增长&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 本地 + 经负载均衡的健康检查连续成功&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; journal 无秒级 &lt;code&gt;Scheduled restart job&lt;/code&gt; 刷屏&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;监控与告警&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;采集 &lt;code&gt;node_systemd_unit_state&lt;/code&gt;、&lt;code&gt;systemd_unit_restarts_total&lt;/code&gt;（或等价 exporter）。&lt;/li&gt;&#xA;&lt;li&gt;规则示例：5 分钟内重启次数 &amp;gt; 3 告警；&lt;code&gt;activating&lt;/code&gt; 持续 &amp;gt; 1 分钟告警；journal 错误速率突增联动。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;发布策略&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;先改配置再 reload 的路径，&lt;strong&gt;串行单台&lt;/strong&gt;，观察 Restart 指标后再下一批。&lt;/li&gt;&#xA;&lt;li&gt;端口变更坚持「先起新端口旁路验证 → 再切流量 → 再停旧」，避免 bind 冲突秒退。&lt;/li&gt;&#xA;&lt;li&gt;配置渲染进 CI：校验 YAML/端口区间/文件存在性，拒绝明显坏配置进仓库。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;排障预案&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Runbook 第一条写清：怀疑重启风暴时 &lt;strong&gt;先 &lt;code&gt;systemctl stop/mask&lt;/code&gt; 停叉，再查配置&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;演练：故意提交坏 ExecStart，验证 StartLimit 与告警是否在业务大面积 5xx 前触发。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;与日志系统协同&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;失败启动日志限速（应用侧）、journald rate limit 复核，避免风暴二次填满磁盘导致连环故障。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&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;strong&gt;管控平面放大配置错误&lt;/strong&gt;」事故：应用其实已经「明确失败」，但 &lt;code&gt;Restart=always&lt;/code&gt; 在无 StartLimit、短 RestartSec 下把失败变成每秒数十次的自攻击，主机 load、journal 与排障通道一起垮掉，业务表现为大面积 502 与间歇恢复的假象。&lt;/p&gt;&#xA;&lt;p&gt;处理顺序应当是 &lt;strong&gt;停风暴 → 修配置 → 受控拉起 → 补熔断与监控&lt;/strong&gt;，而不是在 auto-restart 刷屏时继续叠变更。预防上，把 StartLimit、重启语义、NRestarts 验收和 unit 状态告警写进基线，比再写一百行业务重试更管用。&lt;/p&gt;&#xA;&lt;p&gt;一句话：&lt;strong&gt;自动重启是保险丝，不是永动机；该熔断时必须熔断，否则 systemd 会比攻击者更早打满你的机器。&lt;/strong&gt;&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
