Page 1 of 1

CPU Last auslesen

Posted: 2008-03-24 17:23
by static
Hi
ich habe bei einem neuen Server etwas mit rrdtool rumgespielt und mir schöne Graphen zusammengestellt :)

Leider will das Auslesen der prozentualen CPU Auslastung (User, System, Nice, Idle, IO Wait) einfach nicht funktionieren.
Ich erhalte immer praktisch die gleichen, äusserst niedrigen Werte, selbst wenn ich künstlich sehr hohe Last erzeuge.

Ich habe es einerseits mit Auslesen von `top` und direkt von /proc/stat versucht, erhalte aber das gleiche Resultat.

Zum veranschaulichen reicht dieses simple Skript:

Code: Select all

#!/bin/bash
echo `/usr/bin/top -n 1 -b | head -n 3`
Wenn ich dieses Skript ausführe, sehe ich immer ungefähr:

Code: Select all

top - 17:16:56 up 3 days, 2:40, 3 users, load average: 0.00, 0.02, 0.09 
Tasks: 64 total, 3 running, 61 sleeping, 0 stopped, 0 zombie 
Cpu(s): 1.3%us, 0.4%sy, 0.0%ni, 98.0%id, 0.1%wa, 0.1%hi, 0.1%si, 0.0%st
Wenn ich in einer zweiten Shell `top` interaktiv mitlaufen lassen sehe ich dort hingegen die richtige Angabe:

Code: Select all

top - 17:16:57 up 3 days,  2:40,  3 users,  load average: 0.08, 0.04, 0.09
Tasks:  60 total,   4 running,  56 sleeping,   0 stopped,   0 zombie
Cpu(s): 84.7%us, 15.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Ich glaube nicht, dass es ein Problem des Skripts ist. Könnte es sein, dass, weil ja zu jeder Zeit in Wirklichkeit nur 1 Prozess läuft, man in diesem kurzen Abschnitt nur die Prozessorbelastung des Skripts, welches diese gerade ausliest sieht?.

Jemand eine Idee wie man an die richtigen Daten rankommt?

Danke, static

Re: CPU Last auslesen

Posted: 2008-03-24 17:42
by freddy36
Was für Daten brauchst du genau?
Las das sein mit top...

Am besten du bedienst dich direkt aus /proc
Ansonsten guck dir mpstat an.

Re: CPU Last auslesen

Posted: 2008-03-24 18:13
by static
Ich möchte User, System, Nice, Idle und IO Wait in Prozent der CPU.

Wie geschrieben habe ich es mit /proc/stat versucht, komme aber auf das gleiche Resultat wie beim auslesen von top über das Skript.
mpstat habe ich gerade ausprobiert, ebenfalls die gleichen Werte...

Irgendwie versteh ich grad gar nichts mehr, wie kann das sein? :)

Re: CPU Last auslesen

Posted: 2008-03-24 18:28
by freddy36
wenn /proc/stat != top, dann stimmt was nicht mit deinem top.
Die Daten kommen direkt vom Kernel und top, etc. werten genau diese Daten aus.
Machst du das alles unter dem selben user?

Re: CPU Last auslesen

Posted: 2008-03-24 18:30
by static
Ja, selber User.

Ich glaube ich weiss jetzt was das Problem ist... Ich habe die Angaben in /proc/stat falsch interpretiert, die ergeben nur Sinn, wenn man diese über einen bestimmten Zeitraum miteinander vergleicht.
Daher wird bei einmaligem Aufruf von top, auch nichts vernünftiges rauskommen...

Ich schau mir das nochmals an.

Re: CPU Last auslesen

Posted: 2008-03-24 18:33
by Joe User
Lies den Source von top...

Re: CPU Last auslesen

Posted: 2008-03-24 18:47
by static
Meine Annahme war korrekt - die Daten müssen über die Zeit betrachtet werden.
Vielen Dank. Jetzt funktioniert's.