情境
我有一個系統,我必須定期檢查使用:
- 相對(百分比)
CPU
- 和絕對 (GB) 的
memory
.
目前是如何實施的
我們使用的語言是python
.
全系統psutil
對於系統範圍的統計數據來說,這很簡單,因為我們可以使用psutil.cpu_percent()
和psutil.virtual_memory()
。
cgroup
(v1)
問題是,有時腳本在容器內運行,然後我們希望監視特定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