Plainnotes

是谁杀了进程:OOM killer 的日志在哪

2026-10-26 · 3 分钟排错

服务半夜消失,systemctl status 只说 killed,应用日志里没有任何异常。先看内核:

dmesg -T | grep -i -E 'oom|killed process'
journalctl -k --since '1 day ago' | grep -i oom

典型输出会写明被杀的进程、PID、RSS 和当时的 total-vm。如果看到 Out of memory: Killed process 1234 (java),那就是内核干的,不是应用自己退出。

两种处理:给进程设 MemoryMax= 让它先被自己的 cgroup 限制挡住,或者把 oom_score_adj 调低保护关键进程。但多数时候真正要做的是查内存为什么涨——用 smem -t -k 或 /proc/<pid>/smaps_rollup 看是堆还是页缓存。