12
votes

Obtenir un cpu pourcentage d'utilisation en PHP

Je veux montrer une utilisation en pourcentage de la CPU dans PHP. N'est-ce pas important si vous obtenez des valeurs par cron dans Shell> Sortie dans Fichier> Analysez en PHP ou obtenez directement la valeur dans PHP. J'essaie de nombreuses solutions trouvées sur Internet, mais rien n'était utile. Avec la moyenne de la charge, je ne peux pas afficher 0-100% de barre graphique et des fonctions que j'ai trouvées pour le pourcentage de sortie donnez-moi de mauvaises valeurs ou une seule valeur pour le premier noyau. Ce serait bien d'obtenir un numéro de pourcentage d'utilisation pour chaque noyau. Y a-t-il une solution pour cela?

EDIT:

Je fais une solution temporaire, cela fonctionne bien, mais ce n'est pas le meilleur moyen.

travail cron chaque minute Exécuter PHP Script exécutif Commande pour les info du processeur Grep à partir de "TOP" et enregistrez-la dans Fichier, sur le script final, attendez 3 secondes et boucle 20 fois (moyen d'obtenir la mise à jour toutes les 3 secondes) Script PHP: xxx

et maintenant à partir de ces fichiers, je peux analyser les informations.

nouvelle question est comment faire script Daemon pour exécuter ces commandes toutes les 3 secondes . Je pense que la solution avec PHP Script et Cron n'est qu'une solution temporaire et n'est pas la meilleure solution. le démon sera beaucoup mieux.


2 commentaires

Dupliquer possible? Stackoverflow.com/Questtions/4705759/...


ne pas dupliquer, je peux utiliser EXED et phpsysinfo ne résolvent pas mon problème


6 Réponses :


4
votes

Je ne suis pas sûr à 100% sur ce que vous demandez, mais si j'ai raison, cette réponse pourrait vous aider:

<?php
    exec('ps -aux', $processes);
    foreach($processes as $process)
    {
        $cols = split(' ', ereg_replace(' +', ' ', $process));
        if (strpos($cols[2], '.') > -1)
        {
            $cpuUsage += floatval($cols[2]);
        }
    }
    print($cpuUsage);
?>


2 commentaires

Oui, j'ai vu ce code plus tôt mais il y a quelque chose de bizarre. en PS -aux, j'ai% de valeurs de la CPU sur plus de 100


@stix dépend du nombre de processeurs du système. Si 2 CPU ou 2 cœurs CPU -% E 200.



1
votes

Vous pouvez utiliser "Top -N 1" pour obtenir le pourcentage de la CPU. Cette commande ne fonctionne qu'une seule fois, puis donne une sortie. Je pense que vous pouvez faire la partie analysée par vous-même.


0 commentaires

18
votes

Après avoir cherché sur des forums et essayer de nombreuses méthodes, c'est la meilleure précision, c'est que:

$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);


0 commentaires

2
votes

Utilisez ceci:

<?php
$loads=sys_getloadavg();
$core_nums=trim(shell_exec("grep -P '^physical id' /proc/cpuinfo|wc -l"));
$load=$loads[0]/$core_nums;
echo $load;
?>


1 commentaires

Je voudrais simplement éviter d'exécuter autant de commandes: preg_match_all ('/ ^ processeur / m', fichier_get_contents ('/ proc / cpuinfo'), $ matchs); $ core_nums = compte ($ correspond à [0]);



5
votes

La réponse du diyisme ainsi que la suggestion sur http: // php. net / manuel / fr / fonction.sys-getloadavg.php n'a pas semblé fonctionner sur Centos 6.5 VPS. Nous avons dû changer ID physique code> vers processeur code>. Ensuite, il renvoie un noyau comme ID 0 afin que le calcul nécessite +1 cœurs. De plus, vous devez multiplier par 100 pour obtenir un centile. Enfin, cela doit être arrondi pour un beau pour cent. Donc, voici une pensée alternative qui peut fonctionner si vous rencontrez dans n'importe lequel de cela:

<?php
$loads = sys_getloadavg();
$core_nums = trim(shell_exec("grep -P '^processor' /proc/cpuinfo|wc -l"));
$load = round($loads[0]/($core_nums + 1)*100, 2);
echo $load;
?>


0 commentaires

0
votes

Une autre option: xxx


0 commentaires