Kernel
關於 ulimit/setrlimit 和 cgroup
我知道這兩種機制(我們稱它們為 A 和 B)限制了程序的資源。
我想知道這兩個人的合作。
如果 A 限制了一個程序的資源,那麼當 B 也限制相同的資源時會發生什麼?
所有限制均獨立適用。當程序發出需要超過某個限制的請求時,該請求將被拒絕。這適用於限制是針對 cgroup、每個程序還是每個使用者。
由於 cgroup 為每個程序組設置限制,而 setrlimit 為每個使用者或每個程序設置限制,因此這些機制通常不是冗餘的。給定的請求有可能同時超過 cgroup 和 setrlimit 限制,或者只超過其中一個。
請記住,所有限制都是允許的最大值,而不是保證的最小值。例如,如果每個程序的記憶體限制為 1GB,則如果系統中沒有更多可用記憶體,則具有 200MB 記憶體的程序可能仍會拒絕分配 100MB 的請求,而不管任何適用的限制如何。如果 setrlimit 和 cgroup 限制都適用,則至少可以超過三個最大值:setrlimit 最大值、cgroup 最大值和目前可用資源最大值。