Kontext

Kontext

Kontext

Ich habe ein System, bei dem ich die Nutzung regelmäßig überprüfen muss:

  • relativ (Prozent) fürCPU
  • 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)

cgroupDas 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 .

cgroupsIn 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, cgroup2da die aktuelle Implementierung auf einer verschachtelten Dateistruktur basiert.

cgroupAnUbuntu 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

cgroup2AnUbuntu 22.04

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

verwandte Informationen