进程被 OOM Killer 杀死的定位与修复
进程突然消失,退出码为 137;dmesg 出现 Out of memory: Killed process。在 Kubernetes 里表现为 OOMKilled,容器反复重启。
dmesg -T | grep -i -E 'oom|killed process'
journalctl -k --since '1 hour ago' | grep -i oom
free -m
ps aux --sort=-%mem | head -10
cat /proc/pressure/memory
cat /sys/fs/cgroup/memory.events 2>/dev/null
容器内查看 cgroup:
cat /sys/fs/cgroup/memory.max
cat /sys/fs/cgroup/memory.current
cat /sys/fs/cgroup/memory.events
memory.limit 低于实际峰值;JVM 堆外内存、线程栈、直接内存没算进去。OOMScoreAdjust 让关键进程优先被杀。dmesg、cgroup 计数和进程 RSS 曲线,再重启。oom_score_adj,不要靠关 OOM Killer 解决。memory.events 的 oom_kill 计数。free — 内存使用ps — 进程内存排序dmesg / journalctl — 内核日志systemd-cgtop — cgroup 资源占用合上页面,先回答,再展开对照。
Killed process,重启前应先保留哪些现场?dmesg/内核日志、cgroup 计数和进程 RSS 曲线,再重启。页面把“先取现场”列为修复的第一步。oom_score_adj,不要靠关 OOM Killer 解决。同时监控 memory.events 的 oom_kill 计数。