[PHP] Obtenir utilisation CPU et RAM

Obtenir utilisation CPU et RAM [PHP] - PHP - Programmation

Marsh Posté le 12-02-2004 à 14:14:57    

Question simple (et peut-être conne, je ne sais pas encore ;)):
 
Est-il possible en PHP d'obtenir l'utilisation RAM sur le serveur ainsi que la charge CPU, un peu à la manière de disk_free_space() pour le DD?
 
Je suis sur un serveur dédié et je peux utiliser exec(); s'il le faut.
 
merci!

Reply

Marsh Posté le 12-02-2004 à 14:14:57   

Reply

Marsh Posté le 12-02-2004 à 14:56:57    

Bon, je devrais pouvoir ressortir des trucs de la commande "top -n 1" normalement, mais seule soucis, je ne sais pas me serveur de la commande passthru, qui est apparemment sensé me ressortir le résultat...
De même avec exec() qui normalement place les lignes de résultat dans un tableau, là, le tableau est désepérément vide... une solution?

Reply

Marsh Posté le 12-02-2004 à 15:06:24    

Aller zou, dernière nouvelle: si je fais un exec('ls -n', $test);
Mon tableau $test est bien rempli comme il faut, je dois avoir un soucis avec le "top -n 1" je pense...
 
N'empêche que si certains savent comment faire sans utiliser de "exec" ou autre, je suis preneur. :)

Reply

Marsh Posté le 12-02-2004 à 15:24:58    

Et je me réponds à moi-même: il faut mettre "top -b -n 1" pour que ça fonctionne.
 
... Y n'empêche que ma question posée à l'origine tiens toujours: la possibilité de le faire directement avec une fonction PHP?

Reply

Marsh Posté le 12-02-2004 à 15:26:47    

si tu trouves, je suis interessé :D


---------------
IVG en france
Reply

Marsh Posté le 12-02-2004 à 16:06:58    

Merde, tout content de voir un petit drapeau bleu, je me précipite dessus... et... rien. :D
 
D'après les recherches que j'ai fait bien c'est plutôt mal barré, je suis donc parti sur l'utilisation de "top", mais ce qui est con c'est que cette commande met environ 1-2s pour se lancer et du coup, l'affichage de la page en est d'autant retardé.
Moi qui pensais afficher ça lorsque j'arrivais sur l'interface d'admin de mon site, ben je vais plutôt faire une page à part je pense.
 
Donc là, j'en suis à la génération d'un png qui montre une jauge verte qui se remplie de rouge en fonction de l'utilisation CPU, avec écrit en surimpression le pourcentage exact d'utilisation CPU.
Je fais maintenant la même chose avec l'utilisation de la RAM et du swap, j'ai déjà fait le DD. Donc si avoir le script tout cuit t'intéresse, ben je le posterai ici quand je l'aurai terminé. ;)

Reply

Marsh Posté le 12-02-2004 à 17:37:22    

Aller zou, si y'en a que ça intéresse, voici donc.
On peut certainement faire plus simple, mais je ne connais GD que depuis quelques jours...
 

<?
 Header("Content-type: image/png" );
 exec('top -b -n 1', $test);
 
 $cpu = $test[4];
 $mem = $test[5];
 $swap = $test[7];
 
 /* UTILISATION CPU */
 $cpu = substr($cpu, 11, strpos($cpu, '%')-11);
 $img = imagecreate(200, 160);
 $contour = imagecolorallocate($img, 0, 0, 0);
 $vide = imagecolorallocate($img, 0, 150, 0);
 $plein = imagecolorallocate($img, 200, 0, 0);
 $blanc = imagecolorallocate($img, 255, 255, 255);
 imagefill($img, 0, 0, $blanc);
 imagefilledrectangle($img, 0, 20, 199, 39, $vide);
 $remplissage = round(2*$cpu, 0);
 imagefilledrectangle($img, 0, 20, $remplissage, 39, $plein);
 imageline($img, 0, 20, 0, 39, $contour);
 imageline($img, 0, 20, 199, 20, $contour);
 imageline($img, 0, 39, 199, 39, $contour);
 imageline($img, 199, 20, 199, 39, $contour);
 imagettftext($img, 8, 0, 60, 18, $contour, './include/font/arial.ttf', 'Utilisation CPU :');
 imagettftext($img, 6, 0, 80, 33, $blanc, './include/font/hooge.ttf', $cpu.' %');
 
 
 /* UTILISATION RAM */
 $mem_totale = substr($mem, 4, strpos($mem, 'k av')-4);
 $mem_util = substr($mem, strpos($mem, 'av, ')+4, strpos($mem, 'k used')-(strpos($mem, 'av, ')+4));
 imagefilledrectangle($img, 0, 60, 199, 79, $vide);
 $remplissage = round(200*$mem_util/$mem_totale, 0);
 imagefilledrectangle($img, 0, 60, $remplissage, 79, $plein);
 imageline($img, 0, 60, 0, 79, $contour);
 imageline($img, 0, 60, 199, 60, $contour);
 imageline($img, 0, 79, 199, 79, $contour);
 imageline($img, 199, 60, 199, 79, $contour);
 imagettftext($img, 8, 0, 60, 58, $contour, './include/font/arial.ttf', 'Utilisation RAM :');
 imagettftext($img, 6, 0, 90, 73, $blanc, './include/font/hooge.ttf', round(100*$mem_util/$mem_totale, 0).' %');
 
 /* UTILISATION SWAP */
 $swap_total = substr($swap, 5, strpos($swap, 'k av')-5);
 $swap_util = substr($swap, strpos($swap, 'av, ')+5, strpos($swap, 'k used')-(strpos($swap, 'av, ')+5));
 imagefilledrectangle($img, 0, 100, 199, 119, $vide);
 $remplissage = round(200*$swap_util/$swap_total, 0);
 imagefilledrectangle($img, 0, 100, $remplissage, 119, $plein);
 imageline($img, 0, 100, 0, 119, $contour);
 imageline($img, 0, 100, 199, 100, $contour);
 imageline($img, 0, 119, 199, 119, $contour);
 imageline($img, 199, 100, 199, 119, $contour);
 imagettftext($img, 8, 0, 60, 98, $contour, './include/font/arial.ttf', 'Utilisation Swap :');
 imagettftext($img, 6, 0, 90, 113, $blanc, './include/font/hooge.ttf', round(100*$swap_util/$swap_total, 0).' %');
 
 /* UTILISATION DISQUE DUR */
 $espace_libre = round((disk_free_space('/'))/1048576, 1);
 $espace_total = round((disk_total_space('/'))/1048576, 1);
 imagefilledrectangle($img, 0, 140, 199, 159, $vide);
 $remplissage = 200*($espace_total-$espace_libre)/$espace_total;
 imagefilledrectangle($img, 0, 140, $remplissage, 159, $plein);
 imageline($img, 0, 140, 0, 159, $contour);
 imageline($img, 0, 140, 199, 140, $contour);
 imageline($img, 0, 159, 199, 159, $contour);
 imageline($img, 199, 140, 199, 159, $contour);
 imagettftext($img, 8, 0, 60, 138, $contour, './include/font/arial.ttf', 'Espace disque :');
 imagettftext($img, 6, 0, 90, 153, $blanc, './include/font/hooge.ttf', round(100*($espace_total-$espace_libre)/$espace_total, 0).' %');
 
 imagepng($img);
 imagedestroy($img);
?>

Reply

Marsh Posté le 12-02-2004 à 17:50:25    

Salut,
 
au lieu d'utiliser top, tu peux peut etre recupérer tes infos via ps, qui affiche un instantané des infos processeurs (plus rapide que top) ou mpstat. Pour la RAM, le mieux doit être de lister le fichier /proc/meminfo....
 
Je crois qu'il y a un autre process (bas niveau) qui envoie les infos systèmes à mpstat, ps et top, mais je ne me rappelle plus son nom...

Reply

Marsh Posté le 12-02-2004 à 18:00:23    

je vais essayer ps et autre voir ce que ça donne alors oui, merci. :)
 
Pour proc/meminfo j'y ai déjà regardé, mais le prob est que le fichier fait 0 octet... tout comme cpuinfo.
Je sais pas si c'est normal et que le fichier se "remplit" lorsqu'on va le lire???

Reply

Marsh Posté le 12-02-2004 à 18:05:28    

justement, si tu peux lire ces données (cf droit de lecture), /proc/... est mieux et moins exigeant pour le serveur :jap:


---------------
IVG en france
Reply

Marsh Posté le 12-02-2004 à 18:05:28   

Reply

Marsh Posté le 12-02-2004 à 18:10:32    

En fait, étant donné que les fichiers ont une taille à 0 octet, je ne me suis pas posé la question de les lire. ;)

Reply

Marsh Posté le 12-02-2004 à 18:13:22    

Furaxx a écrit :

En fait, étant donné que les fichiers ont une taille à 0 octet, je ne me suis pas posé la question de les lire. ;)


 
bah sur Linux, je viens de verifié, mon fichier fais bien 0 k
mais si je fais :


[root@ocinh0 proc]# cat cpuinfo  
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 2
model name      : Intel(R) Xeon(TM) CPU 2.80GHz
stepping        : 9
cpu MHz         : 2790.786
cache size      : 512 KB
physical id     : 0
siblings        : 2
runqueue        : 0
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
bogomips        : 5570.56


 
pareil pour les autres  :jap:


---------------
IVG en france
Reply

Marsh Posté le 12-02-2004 à 19:26:11    

/proc est un systeme de fichier virtuel, l'ensemble du dossier /proc fait 0 octet. In ne s'agit en fait pas de fichiers réguliers mais d'une interface d'accès au périphériques systèmes et normalement tout le monde peut y accéder en lecture...

Reply

Marsh Posté le 12-02-2004 à 19:47:44    

Ok, ben je vais reprendre ça avec les "proc", merci pour l'info. :)
 
Je mettrai le code ici ensuite si d'autres comme moi se posent la même question, il auront un truc tout fait. ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed