Linux Out-Of-Memory (OOM) Killer

Motivation

global replacement 會透過 reclaiming 來維持 free frame 緩衝。但如果記憶體需求持續超過供給,free frame 就可能下降到連 min threshold 都守不住的地步。此時 OS 就只能主動殺掉某些 process 來釋放記憶體,這個機制就是 OOM Killer

badness() Function

badness() 函數會負責計算每個 process 的 OOM score,分數越高越容易被殺。計分方式如下:

  • 優先殺記憶體用量大的 process,這樣一刀能釋放最多記憶體
  • 不要殺記憶體用量小的 process,殺了也沒多少收穫
  • 盡量少殺 process,能一個解決就不殺兩個
  • 保護 kernel 自身,kernel process 絕對不能被殺
  • 使用者也可以透過設定提高某些 process 被犧牲的優先權

可以在 /proc/<pid>/oom_score 查看一個 process 的 OOM score