Я пытаюсь ограничить использование подкачки процесса, использующего 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
На этот вопрос был дан ответ в списке рассылки systemd.
Перепубликация соответствующих частей.
Похоже, ваша версия Ubuntu использует "гибридный" режим контрольной группы по по умолчанию. Cgroup v2 действительно включен в вашем ядре, но не обязательно в использовании - в гибридном режиме systemd по-прежнему монтирует все контроллеры ресурсов (cpu , память и т. д.) в режиме v1 и настраивает только собственное отслеживание процессов в дереве v2. См.
findmnt
.Вы могли загрузиться с помощью systemd.unified_cgroup_hierarchy = 1 параметр ядра для переключения всего на cgroups v2, но если вы используете контейнерное программное обеспечение (docker, podman), убедитесь, что они совместимы с cgroups v2.
Привет, Дебрадж.
Чт, 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.