Я использую 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 { memory.limit_in_bytes = 4294967296; } }
Это создает
cgroup
с максимальным пределом памяти 4 ГБ.В
/etc/cgrules.conf
:luser memory memlimit/
Это приведет к тому, что все процессы будут выполняться
luser
быть запущенным внутриmemlimit
cgroups, созданные вcgconfig.conf
.