限制 Ubuntu 18.04 中 systemd 服務的交換使用
我試圖限制使用Ubuntu 18.04文件
MemorySwapMax
中提到的程序的交換使用。環境
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
我試圖通過為
MemorySwapMax
. 但似乎 systemd 中存在一些問題,該問題已在 systemd 239 中修復。所以我也嘗試了設置
MemorySwapMax=1M
。但這似乎也沒有限制此 systemd 服務的交換記憶體使用。的文件
MemorySwapMax
說明了這一點This setting is supported only if the unified control group hierarchy is used and disables MemoryLimit=.
有人可以讓我知道如何知道
unified control group hierarchy
我的設置中是否正在使用 systemd,或者還有什麼可能是不允許MemorySwapMax
生效的問題?編輯
如this answer中所述,我可以看到已
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 模式。Cgroup v2 確實在你的核心中啟用,但不一定 在使用——在混合模式下,systemd 仍然以 v1 模式掛載所有資源控制器(cpu、記憶體等),並且只在 v2 樹中設置自己的程序跟踪。見
findmnt
。您可以使用 systemd.unified_cgroup_hierarchy=1 核心選項啟動以將所有內容切換到 cgroups v2,但如果您使用的是容器軟體(docker、podman),請確保它們與 cgroups v2 兼容。
你好,德布拉傑。
2021 年 7 月 8 日星期四下午 05:10:44 +0530,Debraj Manna 寫道:
> > > > > > > > > > > > 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 > > > > > > > > > $$ … $$ > > > 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 開始預設啟用交換記帳。