Users

如何創建 RAM 使用受限的使用者?

  • December 10, 2018

所以我有 4 GB RAM + 4GB 交換。我想創建一個記憶體和交換有限的使用者:3 GB RAM 和 1 GB 交換。這樣的事情可能嗎?是否可以在不創建單獨的使用者(並且不安裝任何特殊應用程序 - 只有預設的 Debian/CentOS 伺服器配置,並且不使用 sudo)的情況下啟動具有有限 RAM 和交換可用的應用程序?

更新:

所以我打開了 terminall 並輸入了ulimit command:ulimit -v 1000000這應該是976,6Mb限制。接下來我打電話ulimit -a,看到限制是“開”的。然後我啟動了一些 bash 腳本來編譯並啟動我的應用程序nohup,一個很長的 nohup ./cloud-updater-linux.sh >& /dev/null &……但過了一段時間我看到:

在此處輸入圖像描述

(如果沒有應用限制就可以了——它下載了一些大的庫,並開始編譯它。)

但我認為我對 shell 和所有使用/從它啟動的程序應用了限制ulimit -v 1000000?我做錯了什麼?如何使終端及其啟動的所有子程序都受到記憶體使用的限制?

ulimit是為此而生的。ulimit您可以在每個使用者或每個組的基礎上設置預設值

/etc/security/limits.conf

ulimit -v KBYTES設置最大虛擬記憶體大小。我認為您無法提供最大數量的交換。這只是對使用者可以使用的虛擬記憶體量的限制。

所以你limits.conf會有這條線(最多4G記憶體)

luser  hard  as   4000000

更新 - CGroups

由每個程序強加ulimit的限制。limits.conf在這一點上我絕對不清楚。

如果您想限制使用者使用的記憶體總量(這是您所要求的)。你想使用cgroups

/etc/cgconfig.conf

group memlimit {
   memory {
       memory.limit_in_bytes = 4294967296;
   }
}

這將創建一個cgroup最大記憶體限制為 4GiB 的記憶體。

/etc/cgrules.conf

luser   memory   memlimit/

這將導致執行的所有程序都luser在.memlimit``cgconfig.conf

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