Ограничение использования подкачки для службы systemd в Ubuntu 18.04

Я пытаюсь ограничить использование подкачки процесса, использующего MemorySwapMax , как указано в документе с Ubuntu 18.04.

Environment

ubuntu@vrni-platform:/usr/lib/systemd/system$ uname -a
Linux vrni-platform 4.15.0-143-generic #147-Ubuntu SMP Wed Apr 14 16:10:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

ubuntu@vrni-platform:/usr/lib/systemd/system$ systemctl --version
systemd 237
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid

Мой файл модуля systemd выглядит так, как показано ниже

[Unit]
Description=My service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=support
MemoryMax=2000M
KillMode=process
MemoryAccounting=true
OOMScoreAdjust=1000
MemorySwapMax=0
ExecStart=/usr/bin/java -cp /home/support -XX:NativeMemoryTracking=summary -Xmx10000m MemoryConsumer 100 200 1

Я попытался отключить свопинг для этого процесса, указав 0 для MemorySwapMax . Но, похоже, была некоторая проблема в systemd, которая исправлена ​​в systemd 239.

Так что я также попытался установить MemorySwapMax = 1M .Но это также, похоже, не ограничивает использование памяти подкачки для этой службы systemd.

В документации для MemorySwapMax указано следующее

This setting is supported only if the unified control group hierarchy is used and disables MemoryLimit=.

Может ли кто-нибудь сообщить мне, как я могу узнать, использует ли systemd объединенную иерархию групп управления в моей настройке или что-то еще может быть проблема, которая не позволяет MemorySwapMax вступить в силу?

РЕДАКТИРОВАТЬ

Как упоминалось в этом ответе , я вижу, что cgroup2 включен

ubuntu@vrni-platform:/tmp/debraj$ sudo mount -t cgroup2 none /tmp/debraj
ubuntu@vrni-platform:/tmp/debraj$ ls -l /tmp/debraj/
total 0
-r--r--r--  1 root root 0 Jul  2 17:13 cgroup.controllers
-rw-r--r--  1 root root 0 Jul  2 17:13 cgroup.max.depth
-rw-r--r--  1 root root 0 Jul  2 17:13 cgroup.max.descendants
-rw-r--r--  1 root root 0 Jun 30 14:42 cgroup.procs
-r--r--r--  1 root root 0 Jul  2 17:13 cgroup.stat
-rw-r--r--  1 root root 0 Jul  2 17:13 cgroup.subtree_control
-rw-r--r--  1 root root 0 Jul  2 17:13 cgroup.threads
drwxr-xr-x  2 root root 0 Jun 30 14:42 init.scope
drwxr-xr-x 87 root root 0 Jul  2 15:05 system.slice
drwxr-xr-x  7 root root 0 Jun 30 15:22 user.slice
ubuntu@vrni-platform:/tmp/debraj$ sudo umount /tmp/debraj
0
задан 2 July 2021 в 20:17
1 ответ

На этот вопрос был дан ответ в списке рассылки systemd.

Link1

Перепубликация соответствующих частей.

Похоже, ваша версия Ubuntu использует "гибридный" режим контрольной группы по по умолчанию. Cgroup v2 действительно включен в вашем ядре, но не обязательно в использовании - в гибридном режиме systemd по-прежнему монтирует все контроллеры ресурсов (cpu , память и т. д.) в режиме v1 и настраивает только собственное отслеживание процессов в дереве v2. См. findmnt .

Вы могли загрузиться с помощью systemd.unified_cgroup_hierarchy = 1 параметр ядра для переключения всего на cgroups v2, но если вы используете контейнерное программное обеспечение (docker, podman), убедитесь, что они совместимы с cgroups v2.

Link2

Привет, Дебрадж.

Чт, 8 июля 2021 г., 17:10:44 +0530, Дебрадж Манна написал:

Linux vrni-platform 4.15.0-143-generic # 147-Ubuntu SMP среда, 14 апреля, 16:10:11 UTC 2021 x86_64 x86_64 x86_64 GNU / Linux [...] GRUB_CMDLINE_LINUX = "audit = 1 rootdelay = 180 nousb net.ifnames = 0 biosdevname = 0 fsck.mode = force fsck.repair = yes ipv6.disable = 1 systemd.unified_cgroup_hierarchy = 1 "

Даже после внесения этих изменений MemorySwapMax не вступает в силу.

Вам также необходимо добавить swapaccount = 1, учет подкачки включен по умолчанию только с версии ядра v5.8.

1
ответ дан 28 July 2021 в 14:06

Теги

Похожие вопросы