CPU Last auslesen

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
static
Posts: 437
Joined: 2002-10-27 19:56
Location: Schweiz

CPU Last auslesen

Post by static » 2008-03-24 17:23

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

freddy36
RSAC
Posts: 277
Joined: 2008-03-20 17:31

Re: CPU Last auslesen

Post by freddy36 » 2008-03-24 17:42

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.

static
Posts: 437
Joined: 2002-10-27 19:56
Location: Schweiz

Re: CPU Last auslesen

Post by static » 2008-03-24 18:13

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? :)

freddy36
RSAC
Posts: 277
Joined: 2008-03-20 17:31

Re: CPU Last auslesen

Post by freddy36 » 2008-03-24 18:28

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?

static
Posts: 437
Joined: 2002-10-27 19:56
Location: Schweiz

Re: CPU Last auslesen

Post by static » 2008-03-24 18:30

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.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11583
Joined: 2003-02-27 01:00
Location: Hamburg

Re: CPU Last auslesen

Post by Joe User » 2008-03-24 18:33

Lies den Source von top...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

static
Posts: 437
Joined: 2002-10-27 19:56
Location: Schweiz

Re: CPU Last auslesen

Post by static » 2008-03-24 18:47

Meine Annahme war korrekt - die Daten müssen über die Zeit betrachtet werden.
Vielen Dank. Jetzt funktioniert's.