Nach http://net-snmp.sourceforge.net/docs/mibs/ucdavis.html#scalar_notcurrent ssCpuUser
, ssCpuSystem
, ssCpuIdle
, etc. sind für die rohen Varianten veraltet ( ssCpuRawUser
usw.).
Die früheren Werte (die Dinge wie Nizza, Warten, Kernel, Interrupt usw. nicht abdecken) gaben einen Prozentwert zurück:
Der Prozentsatz der CPU-Zeit, die für die Verarbeitung von Code auf Benutzerebene aufgewendet wurde, berechnet in letzter Minute.
Dieses Objekt wurde zugunsten von '
ssCpuRawUser(50)
' veraltet , mit dem dieselbe Metrik berechnet werden kann, jedoch über einen beliebigen Zeitraum.
Die Rohwerte geben die "rohe" Anzahl von Ticks zurück, die die CPU ausgegeben hat:
Die Anzahl der 'Ticks' (normalerweise 1 / 100s), die für die Verarbeitung von Code auf Benutzerebene aufgewendet wurden.
Auf einem
ssCpuRaw*
Multiprozessorsystem sind die Zähler über alle CPUs kumulativ, sodass ihre Summe normalerweise N * 100 beträgt (für N Prozessoren).
Meine Frage ist: Wie wandelt man die Anzahl der Zecken in Prozent um?
Das heißt, woher wissen Sie, wie viele Ticks pro Sekunde (dies ist normalerweise - was nicht immer impliziert - 1 / 100s, was entweder 1 alle 100 Sekunden bedeutet oder dass ein Tick 1/100 Sekunde darstellt).
Ich stelle mir vor, Sie müssen auch wissen, wie viele CPUs es gibt, oder Sie müssen alle CPU-Werte abrufen, um sie alle zusammen zu addieren. Ich kann anscheinend keine MIB finden, die Ihnen einen ganzzahligen Wert für die Anzahl der CPUs gibt, was die frühere Route umständlich macht. Die letztere Route scheint unzuverlässig zu sein, da sich einige der Zahlen ( manchmal ) überschneiden . Hat zum Beispiel ssCpuRawWait
die folgende Warnung:
Dieses Objekt wird nicht auf Hosts implementiert, auf denen das zugrunde liegende Betriebssystem diese bestimmte CPU-Metrik nicht misst. Diese Zeit kann auch im
ssCpuRawSystem(52)
Zähler enthalten sein.
Etwas Hilfe wäre dankbar. Überall scheint nur zu sagen, dass% veraltet ist, weil es abgeleitet werden kann, aber ich habe nirgendwo etwas gefunden, das den offiziellen Standard für die Durchführung dieser Ableitung zeigt.
Die zweite Komponente ist, dass diese "Zecken" kumulativ zu sein scheinen, anstatt über einen bestimmten Zeitraum. Wie kann ich Werte über einen bestimmten Zeitraum hinweg abtasten?
Die ultimative Information, die ich möchte, ist:% Benutzer, System, Leerlauf, nett (und idealerweise stehlen, obwohl es dafür keine Standard-MIB zu geben scheint) "aktuell" (in den letzten 1-60er Jahren wäre wahrscheinlich ausreichend, mit einer Präferenz für kleinere Zeitspannen).
quelle
Da die meisten Linux-Distributionen 1/100 Ticks haben, ist eine sehr einfache Möglichkeit, dies zu tun, Bash:
Unter RH / Centos und Ubuntu funktioniert es im Intervall von 5 Sekunden gut und präzise ... Weniger als das erhöht snmp den Counter32 nicht und Sie erhalten die ganze Zeit Nullen.
Ich habe Loops gemacht und mit verglichen
iostat -c 5 100
, auch IO mit generiertdd
, und es hat gut funktioniert.Sie können jede der ssCPUraw-OIDs (1.3.6.1.4.1.2021.11.5x von 50 bis 57, wenn ich mich nicht irre, in meinem Beispiel habe ich ssCPURawWait, 54 verwendet) verwenden,
1.3.6.1.2.1.25.3.3.1.2 | wc -l
um die Anzahl der Kerne zu ermitteln. ..Sie müssen das "Delta" des Zählers / Intervalls teilen - in meinem Fall 5 / - das ist im Grunde das, was das Skript tut!
quelle
Zusätzlich zu dem, was Chutz bereits geschrieben hat, finden Sie den Hinweis auf die Dauer eines Ticks in
man 2 times
:Dies ist eine Systemfunktion, die in C aufgerufen werden kann, aber auch durch einfaches Ausführen
getconf CLK_TCK
in Ihrer Shell erhalten werden kann. Diese Zahl ist eine Kompilierung-Konstante und konnte von jedermann verändert werden , um die Quelldateien zu berühren, aber dies ein eher seltenes Ereignis sein würde - gängige Linux - Distributionen sind alle mit dem Wert 100.Zum Beispiel:
quelle
ssCpuRawUser
,ssCpuRawNice
undssCpuRawSystem
teilt sich der jeweilige Wert durch die Summe vonssCpuRawUser + ssCpuRawNice + ssCpuRawSystem + ssCpuRawIdle
und multipliziert mit 100, um den Prozentsatz zu erhalten. Ein anderes Diagramm zeigt einen vereinfachten Ansatz, indem nur ssCpuRaw * -Werte durch 100 geteilt werden (blind angenommen ein _SC_CLK_TCK von 100)