今天本来要写一个读取CPU使用率,调度程序开销的代码
查了一些资料,发现很多资料写的并不对。
基本上方法都是使用命令获取数据然后求取对应的比值。
但是取得比值的方式是有问题的。
对于LINUX来说,他的proc伪文件系统,保存的是当时的数据。需要通过差值来获取占用比和速度。
所以我们需要取得2个时间差的数据。下面是代码,需要根据具体的系统修改。
$str = shell_exec('more /proc/net/dev');
$pattern = "/([^\s]+):[\s]{0,}(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/";
preg_match_all($pattern, $str, $out);
foreach($out[0] as $k => $r)
{
if(strpos($r,'eth0') !== false)
{
echo $out[0][$k].'
';
$t1 = $out[$k][10];
break;
}
}
$sec = 10;
sleep($sec);
$str = shell_exec('more /proc/net/dev');
$pattern = "/([^\s]+):[\s]{0,}(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/";
preg_match_all($pattern, $str, $out);
foreach($out[0] as $k => $r)
{
if(strpos($r,'eth0') !== false)
{
echo $out[0][$k].'
';
$t2 = $out[$k][10];
break;
}
}
$t=($t2-$t1)/$sec;
$t = $t*8/1024/1024;
echo $t;
?>
网速
$str = shell_exec('more /proc/stat');
$pattern = "/(cpu[0-9]?)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)/";
preg_match_all($pattern, $str, $out);
$n = 0;
$s1 = $out[2][$n]+$out[3][$n]+$out[4][$n]+$out[5][$n]+$out[6][$n]+$out[7][$n]+$out[8][$n]+$out[9][$n]+$out[10][$n]+$out[11][$n];
$t1 = $out[5][$n];
//echo $out[1][$n]."=".round((100*($out[1][$n]+$out[2][$n]+$out[3][$n])/($out[4][$n]+$out[5][$n]+$out[6][$n]+$out[7][$n]+$out[8][$n]+$out[9][$n])),2)."%
";
sleep(60);
$str = shell_exec('more /proc/stat');
$pattern = "/(cpu[0-9]?)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)/";
preg_match_all($pattern, $str, $out);
$n = 0;
$s2 = $out[2][$n]+$out[3][$n]+$out[4][$n]+$out[5][$n]+$out[6][$n]+$out[7][$n]+$out[8][$n]+$out[9][$n]+$out[10][$n]+$out[11][$n];
$t2 = $out[5][$n];
//echo $out[1][$n]."=".round((100*($out[1][$n]+$out[2][$n]+$out[3][$n])/($out[4][$n]+$out[5][$n]+$out[6][$n]+$out[7][$n])),2)."%
";
//print_r($out);
$t=$t2-$t1;
$s=$s2-$s1;
echo $t.'/'.$s.'
';
echo $out[1][$n]."=".round(100*($s-$t)/$s,2)."%
";
?>
CPU