获取在PHP中的CPU使用百分比(Get cpu percent usage in php)

2019-07-03 11:20发布

我想说明的PHP%的CPU使用率。 如果外壳得到的值由cron>输出到文件>在PHP解析,或者直接在PHP中获得价值并不重要。 我尝试上网,但没有上找到很多解决方案是有用的。 随着平均负载我无法显示0-100%图形条和功能,我发现了个输出给我坏值或只对第一个核心价值。 这将是很好得到使用百分比数,每核心。 有没有解决这个?

编辑:

我做临时的解决方案,它的作品不错,但它不是最好的方法。

cron作业每分钟运行PHP脚本,从“顶” grep的CPU信息exec命令,并将其保存到文件,在结束脚本等待3秒,循环20次(的方式得到更新,每3秒),php脚本:

<?php
for($i=0; $i<=20; $i++) {
    //cpu load
    exec("top -b -n 1 | grep 'Cpu(s):' > /some/file.cpu");
    //ram usage
    exec("top -b -n 1 | grep 'Mem:' > /some/file.ram");
    //wait 3sec
    sleep(3);
}
?>

现在从这个文件,我可以分析信息。

新的问题是,如何让守护程序脚本来运行这个命令,每3秒。 我想用PHP脚本和cron解决方案只是暂时的解决方案,是不是最好的办法。 守护进程会好很多。

Answer 1:

搜索在论坛和尝试了许多方法后,最好准确是这样的:

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

现在统计在$ CPU [ '用户'],$ CPU [ '好'],$ CPU [ 'SYS'],$ CPU [ '闲置']



Answer 2:

我不是你问100%肯定,但如果我是正确的,这个答案可以帮助你:

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

提供的代码是从一个答案魔子的一个类似的问题: https://stackoverflow.com/a/9846219/904242



Answer 3:

用这个:

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


Answer 4:

你可以用“顶级-n 1”为获得CPU百分比。 这个命令的顶部只有一次,然后给出输出。 我认为你可以做你自己的分析部分。



Answer 5:

通过Diyism答案以及对建议http://php.net/manual/en/function.sys-getloadavg.php似乎并没有在CentOS 6.5 VPS工作。 我们不得不改变physical idprocessor 。 然后,它返回一个芯作为ID 0,因此计算需要1芯。 另外,你需要通过100乘以得到一个百分点。 最后,需要四舍五入为一个好看的百分之。 因此,这里是一个替代的想法,如果你遇到任何的那个可能的工作:

<?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] 2芯机上为0.50,这将显示25%的CPU负载



文章来源: Get cpu percent usage in php