语境

语境

语境

我有一个系统,必须定期检查使用情况:

  • 相对(百分比)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因为当前的实现是基于嵌套文件结构的。

cgroupUbuntu 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

cgroup2Ubuntu 22.04

$ cat /proc/mounts | grep cgroup
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0

相关内容