Назад | Перейти на главную страницу

Конфигурация CGroup в CentOS 7

Я использую 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.