是谁杀了进程:OOM killer 的日志在哪
服务半夜消失,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 看是堆还是页缓存。