Kontext
Ich habe ein System, bei dem ich die Nutzung regelmäßig überprüfen muss:
- relativ (Prozent) für
CPU
- und absolut (GB) für
memory
.
Wie es derzeit umgesetzt wird
Die von uns verwendete Sprache ist python
.
systemweitpsutil
Für systemweite Statistiken ist es trivial, da wir psutil.cpu_percent()
und verwenden können psutil.virtual_memory()
.
cgroup
(Version 1)
cgroup
Das Problem besteht darin, dass das Skript manchmal innerhalb eines Containers ausgeführt wird und wir dann die Nutzung bestimmter statt systemweiter Statistiken überwachen möchten .
cgroups
In unserem System gibt es bereits eine Implementierung , die auf Folgendem basiert:
- für CPU:
cpu.cfs_period_us
cpu.cfs_quota_us
cpuacct.usage
- als Erinnerung:
memory.usage_in_bytes
memory.limit_in_bytes
Was ich brauche
Hier brauche ich eine Antwort auf zwei Fragen:
- Ist die aktuelle Implementierung, die auf dem direkten Lesen von Werten aus Dateien basiert, in Ordnung
cgroup
? - Wenn nein, gibt es Tools, mit denen sich derartige Informationen problemlos abrufen lassen?
- Wenn ja, wie kann ich diese Lösung anpassen
cgroup2
?
Warum die aktuelle Lösung nicht funktioniert fürcgroup2
Das Hauptproblem, das ich derzeit habe, ist der Mangel an Unterstützung, cgroup2
da die aktuelle Implementierung auf einer verschachtelten Dateistruktur basiert.
cgroup
AnUbuntu 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
AnUbuntu 22.04
$ cat /proc/mounts | grep cgroup
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0