コンテクスト
定期的に使用状況を確認する必要があるシステムがあります。
- 相対的(パーセント)
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
必要なもの
ここで、2 つの質問に対する答えが必要です。
- ファイルから直接値を読み取ることに基づく現在の実装は、 に適していますか
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