容器exited with code 137定位(进程被kernel killed)
问题
容器进程有重启的情况,根据dmes -T 看到oom
[Wed Oct 15 17:30:32 2025] Tasks state (memory values in pages): [Wed Oct 15 17:30:32 2025] [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name [Wed Oct 15 17:30:32 2025] [3440962] 0 3440962 1117322 1049188 8531968 0 0 python [Wed Oct 15 17:30:32 2025] oom-kill:constraint=CONSTRAINT_MEMCG,nodemask=(null),cpuset=docker-6bb2f6b062b35ee72a4e4f888cfec38622578d06d2b07edc93f1031799be5630.scope,mems_allowed=0,oom_memcg=/system.slice/docker-
退出码 137 = 被系统强制 kill(SIGKILL 9号信号),最常见的原因是:
容器 OOM(内存溢出被内核 OOM Killer 杀死)
解决
这段日志非常典型,是 Docker 容器因内存不足 (OOMKilled) 被系统内核强制杀死的完整过程。
1.核心关键信息提炼
Memory cgroup out of memory: Killed process 3439793 (python)
total-vm:4468264kB, anon-rss:4184116kB
说明:
- 容器内的 Python 进程占用了约 **4.18 GB 实际内存 (RSS)**;
- 容器所在的 cgroup memory 限制为 4 GB;
- 因为超限,触发 OOM Killer,将该 Python 进程 kill 掉。
2.触发 OOM 的根因
日志末尾清楚说明:
memory: usage 4194304kB, limit 4194304kB, failcnt 36
swap: usage 0kB, limit 4194304kB, failcnt 0
👉 容器内存上限 = 4GB(4194304KB)
- 使用达到上限;
- swap 未启用;
- OOM 被触发。
3.从内核栈看触发点
python invoked oom-killer
mem_cgroup_out_of_memory
try_charge_memcg
do_anonymous_page
这表示:
- Python 进程在分配新的匿名页(堆内存,如 NumPy / 大数据结构)时;
mem_cgroup检测超出容器 memory 限制;- 触发
oom-killer; - 被强制 kill。
解决建议
1. 提高容器内存限制
1 | docker run -m 8g --memory-swap 8g ... |
Kubernetes:
1 | resources: |