OOM Killer
記憶體不足時,kernel 用 oom_badness()(mm/oom_kill.c)替每個 process 打分數,分數最高的被 kill。
不列入候選
- kthread 等 unkillable task
- 正在
vfork oom_score_adj為OOM_SCORE_ADJ_MIN(-1000)- 已被 OOM reap / 標記
MMF_OOM_SKIP
分數
c
points = rss + swap + pagetable_bytes / PAGE_SIZE;
points += oom_score_adj * totalpages / 1000;- 基準是 process 佔用的記憶體(RSS、swap、page table)
oom_score_adj(-1000 ~ 1000)可手動調整:/proc/<pid>/oom_score_adj- 目前分數:
/proc/<pid>/oom_score
參考
- 原文:OOM Killer 簡短筆記
- How does the OOM killer decide which process to kill first?
- Out-of-memory victim selection with BPF