如何在 Ubuntu 22.04 中查找 cgroup 内存限制?

如何在 Ubuntu 22.04 中查找 cgroup 内存限制?

使用 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

在上面的输出中,maxinfinity等效表示无限制

相关内容