语境
我有一个系统,必须定期检查使用情况:
- 相对(百分比)
CPU
- 和绝对(GB)的
memory
。
目前的实施方式
我们使用的语言是python
。
全系统psutil
对于系统范围的统计数据来说,这很简单,因为我们可以使用psutil.cpu_percent()
和psutil.virtual_memory()
。
cgroup
(版本 1)
问题是有时脚本在容器内运行,然后我们想监视特定cgroup
而不是系统范围的统计数据的使用情况。
我们的系统中已经实现了cgroups
以下内容:
- 对于CPU:
cpu.cfs_period_us
cpu.cfs_quota_us
cpuacct.usage
- 对于内存:
memory.usage_in_bytes
memory.limit_in_bytes
我需要的
这里我需要回答两个问题:
- 目前的实现是否基于直接从文件读取值
cgroup
? - 如果没有,是否有任何工具可以轻松获取此类信息。
- 如果是,我该如何适应该解决方案
cgroup2
?
为什么当前解决方案不起作用cgroup2
我现在面临的主要问题是缺乏支持,cgroup2
因为当前的实现是基于嵌套文件结构的。
cgroup
在Ubuntu 20.04
$ cat /proc/mounts | grep cgroup
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup2
在Ubuntu 22.04
$ cat /proc/mounts | grep cgroup
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0