Ограничение оперативной памяти пользователей с помощью cgroups не работает (для меня)

Ограничение оперативной памяти пользователей с помощью cgroups не работает (для меня)

Я зарегистрировался, потому что не смог запустить cgroups с помощью нескольких руководств/комментариев/всего, что вы найдете в Google. Я хочу ограничить объем оперативной памяти, который может использовать определенный пользователь. Интернет говорит «cgroups». Мой тестовый сервер работает под управлением Ubuntu 14.04. Вы можете разделить упомянутые руководства на две категории. Напрямую установить ограничения с помощью echo и использовать определенную конфигурацию. Ни то, ни другое не работает для меня.

Установка лимитов с помощью echo

cgcreate -g cpu,cpuacct,...:/my_group

заканчивается без каких-либо уведомлений. Когда я пытаюсь запустить

echo 100M > memory.limit_in_bytes

он просто говорит "не разрешено" даже при использовании sudo. Я даже не дохожу до какой-либо точки ограничения другого пользователя.

Установка лимитов с помощью конфигурации

Я прочитал о двух файлах конфигурации. Итак, вот мои файлы конфигурации:

cgconfig.conf

mount {
    memory  = /cgroup/memory;
}

group limit_grp {
        memory {
                memory.limit_in_bytes=100M;
                memory.memsw.limit_in_bytes=125M;
        }
}

cgrules.conf

testuser    memory    limit_grp

Когда я бегу

cgconfigparser -l /etc/cgconfig.conf

он монтируется в systemd. Теперь я вхожу в систему как testuser, запускаю задачу, интенсивно использующую память, — и она работает, не заботясь о моем лимите.

Я пробовал перезагрузить, ничего не изменилось. Даже какие-то странные попытки с использованием конфигурации ядра не сработали. Я новичок в cgroups и не ожидал, что это будет так сложно. Буду признателен за любые предложения по моей теме. Заранее спасибо!

решение1

Причина, по которой вы видите такое поведение, вероятно, заключается в том, что с вашим сеансом входа уже связана группа ограничений памяти, и процесс наследует ее в соответствии с конфигурацией systemd.

Проверьте запущенный процесс cgroup с помощью:

cat /proc/pid/cgroup

...и вы можете увидеть что-то вроде:

13:name=systemd:/user/0.user/2.session
12:debug:/
11:pids:/
10:net_prio:/user/0.user/2.session
9:perf_event:/user/0.user/2.session
8:net_cls:/user/0.user/2.session
7:freezer:/user/0.user/2.session
6:devices:/user/0.user/2.session
5:memory:/user/0.user/2.session
4:blkio:/user/0.user/2.session
3:cpuacct:/user/0.user/2.session
2:cpu:/
1:cpuset:/

Если вы не хотите такого поведения, вы можете использовать свою пользовательскую cgroup, отредактировав контроллер памяти /etc/systemd/logind.confи удалив его memoryиз Controllersстроки.

решение2

У меня была похожая проблема (правда, на Fedora 29): Казалось, что мой /etc/cgconfig.confполностью игнорировался. Запуск

sudo systemctl enable cgconfig

и перезагрузка решила проблему.

Связанный контент