我需要在php报告中显示服务器上httpd进程使用的CPU总百分比。
我打电话给exec:
ps -e -o %mem,%cpu,cmd | grep httpd | awk ' {memory+=$1;cpu+=$2} END {printf("%05.2f ",memory);printf("%05.2f\n",cpu)}'
但是上面命令报告的CPU使用率和top命令报告的CPU使用率不匹配。
我需要报告 - >如果CPU忙于40%,10%的httpd进程,20%的mysqld进程,10%的perl进程,那么我需要报告10%的httpd。 (假设没有其他过程)。
我看到了这个:get apache total cpu usage in (linux)
但据我所知,ps命令返回进程占CPU占CPU消耗总百分比的百分比。我知道它变得越来越混乱,所以下面的例子应该有所帮助。
如果httpd消耗10%占用60%的CPU,那么httpd使CPU忙的实际贡献为((100/60)* 10)= 16.66%。它是否正确?还有什么是通过一组进程以相同名称获取cpu使用的最佳方法。
答案 0 :(得分:2)
在ssh中试试
ps aux | grep "httpd" | awk '{sum1 +=$3}; END {print sum1}'
输出是:
10.5
这是内存之和
ps aux | grep "httpd" | awk '{sum1 +=$4}; END {print sum1}'
答案 1 :(得分:1)
我对你的要求并不是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);
?>
在搜索了许多表格之后还发现了另一种方式:
在论坛上搜索并尝试了很多方法,但我还没有尝试过:
$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);
答案 2 :(得分:0)
这适用于OSX:
<?php
exec('ps -e -o %mem,%cpu,command | grep httpd', $output);
$proc_data = [];
foreach($output as $key => $value) {
// Make sure it's only path httpd and not the grep included
if (strstr($value, '/httpd')) {
$info = explode(' ', trim($value), 5);
unset($info[1]);
unset($info[2]);
$proc_data[] = array_merge($info);
}
}
echo '<pre>';
print_r($proc_data);
echo '</pre>';
// Caclulate total CPU percentages
$total_cpu = 0;
foreach ($proc_data as $key => $value) {
$total_cpu += $value[1];
}
echo $total_cpu;
?>
这是bash的终端输出:
MacBook-Pro:~ user$ ps -e -o %mem,%cpu,command | grep httpd
0,2 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,1 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,1 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 9,0 /Applications/MAMP/Library/bin/httpd -k start
0,0 0,0 grep httpd
我注意到ps -e -o %mem,%cpu,cmd
必须是command
,但它可能只是OSX的一部分。希望你能解决这个问题。