Linux

使用 cgroups 限制沒有子程序的單個程序的記憶體

  • October 2, 2021

我需要限制程序的記憶體使用,但忽略它的所有子程序。我怎麼做?使用 cgroups 是首選,但不是必需的。

注意:我想忽略該過程的所有目前和未來的子程序。我知道它可以逃脫限制,但這就是我所需要的。

在我的情況下prlimit --as=<virtual memory in bytes>幫助。它並不總是能正常工作(因為虛擬記憶體很棘手),所以請謹慎使用。您可能還想設置一個軟限制,而不是prlimit --as=<limit>:

例子:

啟動一個虛擬記憶體限制為 2 GB(軟限制和硬限制)的程序

prlimit --as=2147483648 -- process --with args

啟動一個虛擬記憶體限制為 2 GB 的程序(僅軟限制)

prlimit --as=2147483648: -- process --with args

啟動一個虛擬記憶體限制為 2 GB 的程序(僅硬限制)

prlimit --as=:2147483648 -- process --with args

將現有程序限制為 2 GB 的虛擬記憶體

prlimit --as=2147483648 --pid=<process pid>

將目前 shell 限制為 2 GB 的虛擬記憶體

prlimit --as=2147483648 --pid=$$

引用自:https://unix.stackexchange.com/questions/671514