OOM Killer 是怎么选中牺牲进程的
物理内存(以及可回收的页面)紧张到一定程度,内核会触发 Out-Of-Memory Killer,挑一个进程杀掉,好让系统继续跑。表象往往是某服务「突然没了」,不一定留下应用自己的错误日志。
怎么确认是被 OOM 杀的
dmesg -T | grep -i -E 'killed process|out of memory'
journalctl -k -b | grep -i oom
日志里通常有 Killed process 和进程名、分数(oom_score)相关信息。
大致怎么挑牺牲品
内核会给进程算 oom_score(还可看 /proc/<pid>/oom_score)。占用内存多的更容易被选;也可用 oom_score_adj(-1000~1000)调整倾向。设为 -1000 近似「不要杀我」(仍要谨慎,滥用可能导致整机更难恢复)。
旁边该看的
- 是否开了过大的内存超售 / 容器 limit
- 是否某个泄漏进程长期上涨
- swap 是否几乎为 0,压力直接砸在匿名页上
治本仍是控制内存用量;OOM Killer 只是最后一道「保机器」的手段。
← 返回目录