Я зарегистрировался, потому что не смог запустить 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
и перезагрузка решила проблему.