Solución:
después de buscar en foros y probar muchos métodos, la mejor precisión es la siguiente:
$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);
ahora las estadísticas están en $ cpu[‘user’], $ cpu[‘nice’], $ cpu[‘sys’], $ cpu[‘idle’]
No estoy 100% seguro de lo que está preguntando, pero si estoy en lo cierto, esta respuesta podría ayudarlo:
<?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);
?>
El código proporcionado fue una respuesta de Devils Child para una pregunta similar: https://stackoverflow.com/a/9846219/904242
La respuesta de Diyism, así como la sugerencia en http://php.net/manual/en/function.sys-getloadavg.php no parecía funcionar en CentOS 6.5 VPS. Tuvimos que cambiar physical id
para processor
. Luego, devuelve un núcleo como ID 0, por lo que el cálculo necesita +1 núcleos. Además, debe multiplicar por 100 para obtener un percentil. Finalmente, eso debe redondearse para obtener un buen porcentaje. Entonces, aquí hay un pensamiento alternativo que puede funcionar si se encuentra con algo de eso:
<?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;
?>
Entonces, si carga promedio [0] era 0.50 en una máquina de 2 núcleos, esto mostraría una carga de CPU del 25%