Я использую CentOS 7, и у меня есть несколько пользователей, зарегистрированных в системе (UID: 1000, 1001, 1002 и т.д.)
Я хочу ограничить потребление памяти для каждого пользователя с помощью cgroup и systemd.
Следующие команды работают довольно хорошо, но пользователь с UID = 1000 должен войти в систему.
systemctl set-property user-1000.slice MemoryLimit=3000M
systemctl daemon-reload
Если пользователь не вошел в систему, я получаю следующее сообщение об ошибке.
Failed to set unit properties on user-1000.slice: Unit user-1000.slice is not loaded.
Представьте, что у меня есть 20 пользователей, и я хочу настроить ограничения памяти для них. Должен ли я войти в систему вручную или написать сценарий обходного пути, чтобы выполнить команду systemctl set-property
для каждого пользователя? Или существует какое-то изящное и простое решение?
Здесь есть ответ на аналогичный вопрос: https://unix.stackexchange.com/questions/34334/how-to-create-a-user-with-limited-ram-usage
Пределы налагается
ulimit
иlimits.conf
для каждого процесса. Я определенно не понял этого вопроса.Если вы хотите ограничить общий объем памяти, который использует пользователь (это то, что вы просили). Вы хотите использовать контрольные группы.
В
/etc/cgconfig.conf
:group memlimit { объем памяти { memory.limit_in_bytes = 4294967296; } }
Это создает
контрольную группу
с максимальным пределом памяти в 4 ГиБ.В
/etc/cgrules.conf
:luser memory memlimit /
Это приведет к тому, что все процессы, запущенные
luser
, будут выполняться внутри контрольных группmemlimit
, созданных вcgconfig.conf
.