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