mmofacts.com

CPU-Auslastung von Linux per PHP

gepostet vor 15 Jahre, 8 Monate von Kapsonfire

Ich hatte bisher 2 Methoden...

Mein erster Versuch war es per "top" die auslastung auszulesen, dies lief leider nicht so wie erhofft, weil der erste Wert aus irgendeinem Grund immer falsch war (statisch) und für den zweiten Wert es zu lange dauert bis der 2 Wert zurückgegeben hat. Den Delay zwischen den Updates konnte ich auch nicht richtig verändern, weil dadurch die Werte verfälscht wurden.

Meine zweite  Methode war es "ps aux" auszulesen. Die hab ich derzeit auch aktiv, allerdings passt dort die ausgabe auch nicht. Der Wert ist immer zu hoch. Nach einem neustart des MYSQL-Servers passt dieser aber wieder. Es scheint so als würde er beim MYSQL-Server die Auslastung nicht richtig auslesen, da dort der Wert wieder statisch ist.

PHP:

$load=0;
 
  exec("ps aux",$target); //ausgabe in $target speuchern (ausgabe array)
  for($i=1;$i<=sizeof($target);$i++)  //ignoriere erste spalt
  {
  $string=preg_replace("/ +/", " ", $target[$i]); //überflüssige leerzeichen entfernen
  $loads=explode(" ",$string); //teile ausgabe in die einzelnen werte
  $load=$load+$loads[2]; //addiere auslastung
  }
$load=$load/2; //durch anzahl prozessoren

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   1868   660 ?        Ss   Jan04   0:02 init [2]
root      7562  0.0  0.0   1556   572 ?        Ss   Jan04   0:15 /sbin/syslogd
root      7795  0.0  0.0   2132   888 ?        Ss   Jan04   0:02 /usr/sbin/cron
root      7437  0.0  0.0 129808  3124 ?        SNl  Jan11   6:52 ./server_linux
root     28046  0.0  0.0   3968  2004 ?        S    Jan17   0:56 ./psybnc
root     13784  0.0  0.0   7252  2168 ?        Ss   Feb08   0:05 sendmail: MTA:
root     13911  0.0  0.0   4856  1116 ?        Ss   Feb08   0:05 /usr/sbin/sshd
root     25675  0.0  0.1  23188  7384 ?        Ss   02:04   0:00 /usr/sbin/apach
root     27718  0.0  0.0   2380  1168 ?        S    06:43   0:00 /bin/sh /usr/bi
mysql    27757  8.3  0.9 130244 36656 ?        Sl   06:43  44:06 /usr/sbin/mysql
root     27758  0.0  0.0   1480   504 ?        S    06:43   0:00 logger -p daemo
root     27914  0.0  0.0   7796  2392 ?        Ss   11:44   0:00 sshd: root@nott
root     27916  0.0  0.0   4224  1296 ?        Ss   11:44   0:00 /usr/lib/openss
www-data 18410  0.4  0.2  24220  9196 ?        S    15:00   0:08 /usr/sbin/apach
www-data 20039  0.4  0.2  23804  9288 ?        S    15:11   0:04 /usr/sbin/apach
root     20365  0.0  0.0   7640  2376 ?        Rs   15:16   0:00 sshd: root@pts/
root     20369  0.0  0.0   2676  1540 pts/1    Ss   15:16   0:00 -bash
www-data 20393  0.9  0.2  23972  9156 ?        S    15:16   0:08 /usr/sbin/apach
www-data 21585  0.8  0.2  24036  9188 ?        S    15:20   0:05 /usr/sbin/apach
www-data 21697  0.0  0.2  24036  8456 ?        S    15:21   0:00 /usr/sbin/apach
www-data 21698  0.5  0.2  24008  9232 ?        S    15:21   0:03 /usr/sbin/apach
www-data 21702  0.4  0.2  23904  9212 ?        S    15:21   0:02 /usr/sbin/apach
www-data 21743  0.6  0.1  23500  7188 ?        S    15:22   0:03 /usr/sbin/apach
www-data 21788  0.3  0.2  23676  8320 ?        S    15:23   0:01 /usr/sbin/apach
www-data 21794  0.8  0.2  24036  9236 ?        S    15:24   0:03 /usr/sbin/apach
www-data 21796  0.8  0.2  23912  8976 ?        S    15:24   0:03 /usr/sbin/apach
www-data 21797  0.4  0.1  23508  7184 ?        S    15:24   0:01 /usr/sbin/apach
www-data 21804  0.5  0.2  23772  8480 ?        S    15:24   0:02 /usr/sbin/apach
www-data 21807  0.3  0.2  23724  8380 ?        S    15:24   0:01 /usr/sbin/apach
www-data 22031  0.8  0.2  23728  8860 ?        S    15:25   0:02 /usr/sbin/apach
www-data 22052  0.3  0.2  23768  8284 ?        S    15:26   0:01 /usr/sbin/apach
www-data 22094  0.5  0.1  23576  7704 ?        S    15:27   0:01 /usr/sbin/apach
www-data 22097  0.4  0.2  23980  8676 ?        S    15:27   0:00 /usr/sbin/apach
www-data 22102  0.3  0.2  23768  8500 ?        S    15:27   0:00 /usr/sbin/apach
www-data 22106  0.2  0.2  23716  8260 ?        S    15:28   0:00 /usr/sbin/apach
www-data 22107  1.4  0.2  23756  8456 ?        S    15:28   0:02 /usr/sbin/apach
www-data 22108  0.4  0.1  23448  7040 ?        S    15:28   0:00 /usr/sbin/apach
www-data 22109  0.1  0.2  23768  8312 ?        S    15:28   0:00 /usr/sbin/apach
root     22112  0.0  0.0   7640  2356 ?        Ss   15:28   0:00 sshd: root@nott
root     22114  0.0  0.0   4224  1248 ?        Ss   15:28   0:00 /usr/lib/openss
www-data 22123  0.2  0.2  23756  8192 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22138  0.4  0.2  23812  8844 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22139  0.3  0.2  23696  8108 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22140  0.2  0.2  23696  8112 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22141  0.0  0.1  23968  7780 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22142  0.1  0.2  23716  8640 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22143  0.1  0.2  23696  8116 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22144  0.3  0.2  23928  8752 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22145  0.1  0.2  23764  8380 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22152  0.1  0.1  23904  7656 ?        S    15:29   0:00 /usr/sbin/apach
www-data 22266  0.5  0.2  23756  8176 ?        S    15:30   0:00 /usr/sbin/apach
www-data 22267  0.1  0.1  23696  7448 ?        S    15:30   0:00 /usr/sbin/apach
root     22268  0.0  0.0   7640  2356 ?        Ss   15:30   0:00 sshd: root@nott
root     22271  0.0  0.0   4100   948 ?        Ss   15:30   0:00 /usr/lib/openss
www-data 22328  0.1  0.1  23672  7652 ?        S    15:30   0:00 /usr/sbin/apach
www-data 22329  1.0  0.1  23564  7636 ?        S    15:30   0:00 /usr/sbin/apach
www-data 22330  0.1  0.1  23672  8032 ?        S    15:30   0:00 /usr/sbin/apach
www-data 22334  0.2  0.1  23464  6688 ?        S    15:30   0:00 /usr/sbin/apach
www-data 22335  0.5  0.1  23696  7448 ?        S    15:30   0:00 /usr/sbin/apach
www-data 22336  1.2  0.1  23688  6932 ?        R    15:30   0:00 /usr/sbin/apach
www-data 22338  0.0  0.1  23328  4424 ?        S    15:30   0:00 /usr/sbin/apach
www-data 22341  0.3  0.1  23672  7408 ?        S    15:30   0:00 /usr/sbin/apach
root     22363  0.0  0.0   2148   888 pts/1    R+   15:31   0:00 ps aux

Eine weitere dritte Methode wäre es ja den Load von (user,system,nice) auszulesen mit dem idle wert zu addieren und dadurch die Prozentzahl des Idles auszulesen. 100/(USER+SYSTEM+NICE+IDLE)*IDLE

Leider fällt mir dazu derzeit kein Befhel ein um die derzeitiges Infos auszulesen.

Hat jemand für mich ein Lösungsansatz?

gepostet vor 15 Jahre, 8 Monate von TheUndeadable

Ich denke, dass die Glibc oder die Kernel-Lib entsprechende Einsprungpunkte hat, um die Belastung des Prozessors auszulesen.

Per Shell-Unterapplikationen zu starten, ist immer ein denkbar schlechter weg. Dort hast du immer den Overhead der Generierung eines neuen Prozesses, der denkbar überflüssig ist.

Lieber eine inprocess-Bibliothek nutzen. Dafür gibt es Bibliotheken.

gepostet vor 15 Jahre, 8 Monate von Kapsonfire

Original von exe

http://de.php.net/manual/de/function.sys-getloadavg.php

Zwar nicht die prozentuale CPU-Auslastung aber doch ein Loadindikator ..

der Load sagt leider nicht genug aus zur tatsächlichen Auslastung...

Dazu bräuchte ich noch den aktuellen Idle wert. Was mich derzeit aber stutzig macht, ist das Virtuozzo mir eine CPU-Last von 50% angibt aber TOP und nur von 5%

Sonst hätte ich den Weg schon lange eingeschlagen.

Undeadable hast du ein Beispiel für eine entsprechnde Bibliothek?

gepostet vor 15 Jahre, 8 Monate von TheUndeadable

> Was mich derzeit aber stutzig macht, ist das Virtuozzo mir eine CPU-Last von 50% angibt aber TOP und nur von 5%

Virtuozzo fährt eine User-Land-Virtualisierung mit Kernel-Anteilen. Daher ist dieser Wert nicht zuverlässig und kann auch nicht prinzipbedingt zuverlässig sein.

> Undeadable hast du ein Beispiel für eine entsprechnde Bibliothek?

Mit Unix/POSIX-Systemen kenn ich mich nicht aus und habe es auch nicht vor. Du musst schon selbst suchen. Weiß nicht ob es eine zentrale Dokumentationsstelle wie msdn.microsoft.com auch im Linux-Bereich gibt.

gepostet vor 15 Jahre, 8 Monate von Kapsonfire

habs jetzt folgendermaßen gelöst

im background läuft ein programm

der liest alle 5 sekunden die /proc/stat aus und vergleicht die neuen werte mit den alten und gibt dann die auslastung in den letzten 5 sekunden aus

Auf diese Diskussion antworten