获取php中的cpu百分比使用率

sti*_*tix 12 php debian command-line-interface

我想在PHP中显示CPU使用百分比.如果通过shell中的cron获取值>输出到文件>在PHP中解析或直接在php中获取值,则不重要.我尝试在互联网上找到很多解决方案但没有任何用处.对于平均负载,我无法显示0-100%图形条,我找到的百分比输出函数给出了错误的值或只有第一个核心的值.获得每个核心的百分比使用率会很好.有解决方案吗?

编辑:

我做了临时解决方案,它运作良好,但这不是最好的方法.

cron job每隔一分钟运行php脚本,其中exec命令为grep cpu info从"top"保存到文件,在结束脚本上等待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);
}
?>
Run Code Online (Sandbox Code Playgroud)

现在从这个文件我可以解析信息.

新问题是如何让守护进程脚本每3秒运行一次这个命令.我认为使用php脚本和cron的解决方案只是暂时的解决方案,并不是最好的方法.守护进程会好得多.

sti*_*tix 15

在论坛上搜索并尝试了很多方法后,最准确的是:

$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);
Run Code Online (Sandbox Code Playgroud)

现在统计数据在$ cpu ['user'],$ cpu ['nice'],$ cpu ['sys'],$ cpu ['idle']


dha*_*pin 5

Diyism 的回答以及http://php.net/manual/en/function.sys-getloadavg.php上的建议似乎不适用于 CentOS 6.5 VPS。我们不得不physical id改为processor. 然后它返回一个内核作为 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;
?>
Run Code Online (Sandbox Code Playgroud)

因此,如果负载 avg [0] 在 2 核机器上为 0.50,这将显示 25% 的 CPU 负载

  • +1 是做什么用的? (2认同)