Memory-Usage
限制每個使用者的私有記憶體使用
我將 cgroups 與記憶體控制器一起使用來為每個使用者設置記憶體限制(使用
memory.limit_in_bytes
設置)。問題是此設置還考慮了記憶體使用情況。因此,如果限制為 1GB,而使用者只是下載或複制 1GB 的文件,他們的程序就會被殺死。更糟糕的是,記憶體頁面保留在記憶體中,因此使用者的“記憶體使用量”保持接近 1GB,即使他們有零個程序在執行。
自然,這沒有任何意義。我只想限制每個使用者的總私有(非匿名)記憶體使用量。我怎樣才能做到這一點?
或者,讓 OOM 殺手嘗試在終止終止程序之前刪除使用者的記憶體頁面,這甚至不會釋放記憶體頁面。
發布我認為可能是更好的答案。
我的要求是防止一個使用者的失控程序使整個系統崩潰。
Linux 已經有一個功能可以做到這一點:OOM 殺手。
OOM 殺手在系統記憶體不足時執行,並支持快速消耗大量 RAM 的程序。它也不太可能殺死長時間執行的/系統(超級使用者)程序。
OOM 殺手可以通過調整
/proc/<pid>/oom_score_adj
文件來進一步調整。該設置由子程序繼承,因此您只需在每個使用者的根程序上進行設置。(參見Documentation/filesystems/proc.txt,第 3.1 節)