容器被 OOMKilled 杀掉?
OOMKilled 说明容器内存触顶。先分清是容器自身泄漏、内存限额设太低,还是宿主机内存本就不足,再对症加内存或治泄漏。
简短答案
容器被 OOMKilled = 内存需求超过了某个上限:容器 --memory 限额、宿主机物理内存、或 cgroup 组限额。先看 OOM 发生的层级(容器还是宿主机),再决定是调限额还是治泄漏,顺序反了会越修越乱。
现象对照
| 现象 | 判断 |
|---|---|
| 仅单容器被杀 | 该容器 —memory 限额偏低 |
| 整台机所有容器被杀 | 宿主机物理内存耗尽 |
| 跑一阵必杀 | 应用内存泄漏 |
排查步骤
docker inspect <容器> --format '{{.State.OOMKilled}} {{.HostConfig.Memory}}'
dmesg | grep -iE 'oom|killed process' | tail -20
free -h
宿主机层面:看 free -h 总量是否真的不够;容器层面:对比应用实际用量与 --memory 限额,先给 2 倍余量观察是否仍被杀。泄漏场景把容器 --memory 加到实际峰值 × 1.5,同时把泄漏报给应用侧修。部署基线参考 Ubuntu 26.04 服务器版,机制在 Debian 上相同,另见 Ubuntu 发行条目。
操作小结
docker inspect先看 OOMKilled 与 Memory 限额dmesg分清杀的是容器还是宿主- 限额场景加 1.5~2 倍余量观察,泄漏场景报应用侧
- 别无脑加内存——先看实际用量再定上限