Skip to content

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

參考 ​

頁面歷史

Just observe 👀