Watch at Ease看见世界,读懂生活。

技术 · 实用指南

容器以 137 退出或显示“OOMKilled”?先证明 SIGKILL 边界,再增加内存

137 说明进程收到了 SIGKILL,却没有说明是谁发出的。先在同一事故时间窗中关联运行时、cgroup、节点与编排器证据,再调整限制。

连接退出码 137 周围运行时、cgroup、节点内核和编排器证据的图
示意图:关联运行时、cgroup、节点和编排器证据后,137 才能成为诊断。 Watch at Ease

容器退出码是线索,不是根因。137 通常对应 SIGKILL,但进程无法报告发送者;只有与同一次容器尝试和时间窗绑定的 OOMKilled 才是较强证据。

调整内存前建立带时间戳的证据账本,比较运行时终止记录、cgroup 计数器、节点内核证据和编排器事件。各层一致或矛盾被明确保留时才接受诊断。

1. 固定一次事故时间窗

记录准确的容器尝试、节点、开始与退出时间、退出码、信号、运行时原因及最后动作;重启会覆盖状态。

统一时区并保留原始输出,不要把当前计数器与旧内核消息或另一副本混用。

2. 把 137 当作 SIGKILL 证据

列出可能发送者:内核 OOM、操作员或自动化、运行时超时、编排器宽限期升级或其他特权进程。

若显示 OOMKilled,确认属于同一次尝试;若为 false 或缺失,只把 OOM 保留为假设。

3. 定位内存边界

识别实际 cgroup 和限制,记录 memory.max、用量与 memory.events,并比较叶级及相关祖先的计数增量。

叶级 oom_kill 增加支持该边界内终止;节点 OOM 支持更广边界;没有匹配增量就继续检验。

4. 关联节点与编排器证据

读取相同秒级时间窗的节点日志和事件,检查内存压力、驱逐、删除、探针失败、发布、排空或宽限期到期。

缺失证据要明确记为缺失;受限日志和轮换事件降低置信度,不能把假设变成事实。

5. 修复已证明的边界

容器 OOM 要先测工作集、分配尖峰和并发;节点压力、停止升级或外部终止则分别修复容量、关机处理或发送者。

受控复现后,以四层账本无匹配 oom_kill、无节点 OOM、无未知升级且运行时记录符合预期为验收条件。

区分容器 OOM、节点 OOM、停止升级和外部 SIGKILL 的决策图
示意图:按证据分流事故,只修改真正导致终止的边界。 Watch at Ease