Встановіть ліміт ресурсів за замовчуванням для всіх користувачів із системними групами


9

Я можу встановити ліміт пам’яті таким користувачам:

systemctl set-property user-UID.slice MemoryHigh=24G

Чи існує спосіб цього застосувати для всіх користувачів? Я хотів би, щоб кожен користувач отримував 24G, а не 24G для всіх користувачів-процесів (на мою думку, це було б результатом його user.sliceпрямого включення ).

Відповіді:


7

Здається, офіційно не підтримується спосіб це зробити. (Це невірно. Дивіться нижню частину) Офіційно зневірений спосіб (оскільки він маніпулює групою) полягає в наступному:

Зробіть такий файл як /etc/systemd/system/user@.service.d/set-memhigh.conf

[Service]
Type=simple
ExecStartPost=+/root/set-memoryhigh.sh %i

Потім зробіть такий файл як "/root/set-memoryhigh.sh"

#!/bin/bash
exec >>/var/tmp/log.txt 2>&1 # for logging
set -x # for logging 
for d in /sys/fs/cgroup /sys/fs/cgroup/user.slice /sys/fs/cgroup/user.slice/user-$1.slice; do
  echo "+memory" >>${d}/cgroup.subtree_control
done
/bin/echo "24G" >> /sys/fs/cgroup/user.slice/user-$1.slice/memory.high

Ви можете побачити, працює він чи ні, запустивши

cat /sys/fs/cgroup/user.slice/user-${UID}.slice/memory.high

Якщо "/sys/fs/cgroup/user.slice" не існує, об'єднана ієрархія групи не ввімкнена. Ми повинні ввімкнути це як https://unix.stackexchange.com/a/452728/297666

Хоча це працює, я не впевнений, чи подобається вам це ...

Примітка додана 25 липня. Створення наступного файлу /etc/systemd/system/user-1000.sliceдля кожного користувача (заміщення 1000 на UID користувача) накладає обмеження на пам'ять для цього користувача. Я перевірив це на systemd 237 на ubuntu 18.04 та Debian strecth із systemd 237, встановленим із розтяжок:

[Slice]
Slice=user.slice
MemoryHigh=24G

Незручність полягає в тому, що ми повинні створити вищезазначений файл для кожного користувача. За допомогою systemd 239 ми можемо зробити вищезазначений файл так, як /etc/systemd/system/user-.slice.d/memory.confобмеження пам'яті накладається на кожного користувача. Але є помилка в systemd 239 (ця помилка була виправлена ​​в 240), і вона не працює за призначенням. Щоб обійти помилку, зробіть такий файл як user-0.sliceі запустіть systemctl enable user-0.slice. Нам не потрібно робити наступний файл для кожного користувача.

[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target

Тим часом це виглядає як гідне рішення, але я буду триматися за більш офіційну версію.
кай

1
@kai Я знайшов офіційні способи обмеження пам’яті та додав їх до своєї відповіді вище. Сподіваюся, це корисно.
Рютарох Мацумото

1
Я перевірю це, але це виглядає як саме те, що мені потрібно (крім цієї помилки)
кай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.