使用 VERSION="22.04 LTS" 并尝试查找 memory.limit_in_bytes 或 memory.max' 提供的内存限制。但是,似乎没有 '/sys/fs/cgroup/memory/memory.limit_in_bytes' 和 '/sys/fs/cgroup/memory/memory.max'
ls: cannot access '/sys/fs/cgroup/memory/memory.limit_in_bytes': No such file or directory
ls: cannot access '/sys/fs/cgroup/memory/memory.max': No such file or directory
那么,在 Ubuntu 22.04LTS 中,有哪些指标可以替代那些 cgroup 指标呢?
答案1
值得注意的是,一般来说,Ubuntu 操作系统默认没有施加这样的限制,但您可以手动设置该限制...同样,您安装的某些应用程序(如虚拟化/容器服务)可能会默认为其子进程设置该限制。
也就是说,你可以使用以下方式监控 cgroup 的内存使用情况systemd-cgtop
看起来像这样:
Control Group Tasks %CPU Memory Input/s Output/s
/ 1643 7.0 6.2G - -
user.slice 1331 6.9 10.2G - -
user.slice/user-1000.slice 1331 6.9 9.8G - -
user.slice/use…000.slice/[email protected] 1319 6.9 9.8G - -
system.slice 177 0.2 3.2G - -
system.slice/systemd-oomd.service 1 0.1 1.7M - -
system.slice/containerd.service 13 0.0 60.2M - -
system.slice/NetworkManager.service 4 0.0 9.5M - -
system.slice/thermald.service 3 0.0 2.8M - -
system.slice/fail2ban.service 5 0.0 20.9M - -
system.slice/nmbd.service 1 0.0 4.5M - -
system.slice/epmd.service 1 0.0 428.0K - -
system.slice/fwupd.service 6 0.0 111.5M - -
system.slice/cups.service 1 0.0 3.5M - -
system.slice/apache2.service 6 0.0 23.3M - -
dev-hugepages.mount - - 24.0K - -
dev-mqueue.mount - - 8.0K - -
init.scope 1 - 14.9M - -
proc-sys-fs-binfmt_misc.mount - - 4.0K - -
但是,您可以查看系统切片/sys/fs/cgroup/system.slice/
及其子目录的最大限制,例如:
$ head /sys/fs/cgroup/system.slice/memory.max
max
$
$
$ head /sys/fs/cgroup/system.slice/*/memory.max
==> /sys/fs/cgroup/system.slice/accounts-daemon.service/memory.max <==
max
==> /sys/fs/cgroup/system.slice/acpid.service/memory.max <==
max
==> /sys/fs/cgroup/system.slice/apache2.service/memory.max <==
max
==> /sys/fs/cgroup/system.slice/atd.service/memory.max <==
max
==> /sys/fs/cgroup/system.slice/auditd.service/memory.max <==
max
==> /sys/fs/cgroup/system.slice/avahi-daemon.service/memory.max <==
max
==> /sys/fs/cgroup/system.slice/bluetooth.service/memory.max <==
max
...
/sys/fs/cgroup/user.slice/
...对于用户切片,情况也类似。
可以使用以下命令查询每个 systemd 单元的相同信息systemctl show
例如:
$ systemctl show networkd-dispatcher.service | grep '^Memory'
MemoryCurrent=16449536
MemoryAvailable=infinity
MemoryAccounting=yes
MemoryMin=0
MemoryLow=0
MemoryHigh=infinity
MemoryMax=infinity
MemorySwapMax=infinity
MemoryZSwapMax=infinity
MemoryLimit=infinity
MemoryDenyWriteExecute=no
在上面的输出中,max
或infinity
等效表示无限制