PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cpu auslastung



localhost
06-04-2003, 20:59
kann ich mit php die cpu auslastung des server anzeigen lassen ??

AndreRaabe
06-04-2003, 21:16
Je nachdem ob es sich um ein Linux System handelt könntest Du "top" oder "uptime" dazu benutzen... Bei "uptime" bietet es sich an diese per cron-job in eine Log-Datei zu schreiben um dadurch Statistiken zu bekommen. Ich hätte da ein derartiges Skript welches auf cron-job erstellte Logs von uptime zugreift.

Gruß Andre

localhost
06-04-2003, 21:41
ja aber wie gehe ich da for wie siht sowas ungfer aus im php code

AndreRaabe
06-04-2003, 22:22
nunja z.B. so:



<?php


$top_ausgabe = `uptime`;
$top_ausgabe = ereg_replace("load average: ", "",$top_ausgabe);
$test = explode(",", $top_ausgabe);

echo "CPU Last in der letzten Minute: <b>$test[2]</b><br>";
echo "CPU Last in den letzten 5 Minuten: <b>$test[3]</b><br>";
echo "CPU Last in den letzten 15 Minuten: <b>$test[4]</b>";

?>

ist halt nur ein Beispiel....

localhost
06-04-2003, 23:15
ich meine nur die aktuele cpu auslastung das die angezeigt wird ??
also z.b. wie viel er belastet ist von 100 % oder wie viel noch free ist von 100 %

Und was kann man den noch so von system anzeigen lassen

AndreRaabe
07-04-2003, 09:49
Hmmm, dann schau Dir mal das an:

http://phpsysinfo.sourceforge.net/

localhost
07-04-2003, 19:17
mm ok aber jetzt kann ich noch immer nicht die prozentuale cpu auslastung anzeigen

The Ripper
07-04-2003, 20:07
Probiers mal so:


<?php

function getTicks()
{
$fd = fopen('/proc/stat', 'r');

while (!feof($fd))
{
$data = split(' ', fgets($fd, 1024));

if ($data[0] == 'cpu')
return $data;
}

return false;
}

function calcUsage($ticks1, $ticks2)
{
/* 2: user
* 3: system
* 4: nice
* 5: idle
*/
$ticks1sum = $ticks1[2] + $ticks1[3] + $ticks1[4] + $ticks1[5];
$ticks2sum = $ticks2[2] + $ticks2[3] + $ticks2[4] + $ticks2[5];

if ($ticks2sum == $ticks1sum) // Der Zeitabstand zwischen den Messungen war zu kurz!
return 0;

// Berechne: 1 - (Differenz der Idle-Ticks / Differenz der Gesamt-Ticks)
return 1 - (abs($ticks2[5] - $ticks1[5]) / abs($ticks2sum - $ticks1sum));
}

$ticks1 = getTicks();
sleep(1);
$ticks2 = getTicks();

echo sprintf('Auslastung: %.2f %%', calcUsage($ticks1, $ticks2) * 100);

?>


Ich weiss nicht ob das 100% stimmt, aber bei mir könnte es hinkommen (vgl mit top).
Das sleep() muss auf jeden Fall dort stehen bleiben, die Auslastung wird hier über die Differenz der Timer-Ticks in den verschiedenen Kernel-Modi (User = Programme, Nice = Programme mit veränderter Priorität, System = Kernel, Idle = Leerlauf) berechnet.

AndreRaabe
07-04-2003, 20:19
Das Problem ist einfach das, dass Du einen Befehl wie "top" nicht sinnvoll ausführen kannst. Selbst mit Parametern wie "-b oder -n1" bekomme ich keinen Sinnvollen und nutzbaren Wert heraus; Du kannste s ja mal versuchen....

Das einzige was Du machen könntest, ist uptime benutzten und den Minutenwert nehmen. Ich denke sowas reicht in den meißten Fällen aus.

Wenn mich nicht alles täuscht entspricht eine Auslastung von 1.0 bei uptime in etwa 100%. Du kannst also auch ohne weiteres Werte über 100% CPU Auslastung erhalten! D.h. dann, dass Prozesse nicht ohne Zeitverzögerung abgearbeitet werden können...

So hoffe dass hilft jetzt.

Gruß Andre

localhost
08-04-2003, 16:46
jo danke thx dan geht da bekommei ch die prozentuale cpu asulastung angzeigt