web-dev-qa-db-fra.com

Comment obtenir l'utilisation du processeur et RAM utilisation sans exec?

Comment VBulletin obtient-il les informations système sans utiliser exec? Existe-t-il d'autres informations que je peux obtenir sur le serveur sans exec? Je suis intéressé par:

  • bande passante utilisée
  • type de système
  • Vitesse du processeur/utilisation/nombre
  • Utilisation de la RAM
28
Ronan Dejhero

Utiliser PHPSysInfo librairie

phpSysInfo est un script open source PHP qui affiche des informations sur l'hôte en cours d'accès. Il affichera des choses comme:

  • La disponibilité
  • CPU
  • Mémoire
  • SCSI, IDE, PCI
  • Ethernet
  • Souple
  • Informations vidéo

Il analyse directement /proc et n'utilise pas exec.


Une autre façon consiste à utiliser Linfo. C'est un très rapide multi-plateforme php qui décrit le serveur hôte de manière extrêmement détaillée, donnant des informations telles que l'utilisation de la mémoire vive, l'espace disque, les baies de disques, le matériel, les cartes réseau, le noyau, os, samba/cups/truecrypt statut, temps, disques, et bien plus encore.

44
shamittomar

C’est ce que j’utilise sur les serveurs Linux. Il utilise toujours exec, mais d’autres questions pointent ici en double et il n’ya aucune [bonne] suggestion pour celles-ci. Il devrait fonctionne sur toutes les distributions, mais si ce n’est pas le cas, essayez de jouer avec $get_cores + 1 offset.

CPU en pourcentage de cœurs utilisés (5 min en moyenne):

$exec_loads = sys_getloadavg();
$exec_cores = trim(Shell_exec("grep -P '^processor' /proc/cpuinfo|wc -l"));
$cpu = round($exec_loads[1]/($exec_cores + 1)*100, 0) . '%';

RAM en pourcentage du total utilisé (temps réel):

$exec_free = explode("\n", trim(Shell_exec('free')));
$get_mem = preg_split("/[\s]+/", $exec_free[1]);
$mem = round($get_mem[2]/$get_mem[1]*100, 0) . '%';

RAM en Go utilisée (temps réel):

$exec_free = explode("\n", trim(Shell_exec('free')));
$get_mem = preg_split("/[\s]+/", $exec_free[1]);
$mem = number_format(round($get_mem[2]/1024/1024, 2), 2) . '/' . number_format(round($get_mem[1]/1024/1024, 2), 2);

Voici ce qu'il y a dans le tableau $get_mem si vous avez besoin de calculer d'autres facettes:

[0]=>row_title [1]=>mem_total [2]=>mem_used [3]=>mem_free [4]=>mem_shared [5]=>mem_buffers [6]=>mem_cached

Bonus, voici comment obtenir le temps de disponibilité:

$exec_uptime = preg_split("/[\s]+/", trim(Shell_exec('uptime')));
$uptime = $exec_uptime[2] . ' Days';
4
dhaupin
<?php
function get_server_load() 
{
    $load=array();
    if (stristr(PHP_OS, 'win')) 
    {
        $wmi = new COM("Winmgmts://");
        $server = $wmi->execquery("SELECT LoadPercentage FROM Win32_Processor");  
        $cpu_num = 0;
        $load_total = 0;
        foreach($server as $cpu)
        {
            $cpu_num++;
            $load_total += $cpu->loadpercentage;
        }

        $load[]= round($load_total/$cpu_num);

    } 
    else
    {
        $load = sys_getloadavg();
    }
    return $load;
}
echo implode(' ',get_server_load());
3
Stergios Zg.

après avoir cherché sur des forums et essayé de nombreuses méthodes, voici la meilleure précision:

$stat1 = file('/proc/stat'); 
sleep(1); 
$stat2 = file('/proc/stat'); 
$info1 = explode(" ", preg_replace("!cpu +!", "", $stat1[0])); 
$info2 = explode(" ", preg_replace("!cpu +!", "", $stat2[0])); 
$dif = array(); 
$dif['user'] = $info2[0] - $info1[0]; 
$dif['Nice'] = $info2[1] - $info1[1]; 
$dif['sys'] = $info2[2] - $info1[2]; 
$dif['idle'] = $info2[3] - $info1[3]; 
$total = array_sum($dif); 
$cpu = array(); 
foreach($dif as $x=>$y) $cpu[$x] = round($y / $total * 100, 1);
print_r($cpu);
0
Vishnu T Asok