PHP 获取 CPU 网速信息的方法,针对LINUX系统今天本来要写一个读取CPU使用率,调度程序开销的代码 查了一些资料,发现很多资料写的并不对。 基本上方法都是使用命令获取数据然后求取对应的比值。 但是取得比值的方式是有问题的。 对于LINUX来说,他的proc伪文件系统,保存的是当时的数据。需要通过差值来获取占用比和速度。 所以我们需要取得2个时间差的数据。下面是代码,需要根据具体的系统修改。 <?php $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].'<br/>'; $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].'<br/>'; $t2 = $out[$k][10]; break; } } $t=($t2-$t1)/$sec; $t = $t*8/1024/1024; echo $t; ?> 网速 <?php $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)."%<br>"; 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)."%<br>"; //print_r($out); $t=$t2-$t1; $s=$s2-$s1; echo $t.'/'.$s.'<br/>'; echo $out[1][$n]."=".round(100*($s-$t)/$s,2)."%<br>"; ?> CPU
没有评论
|
|
Copyright © 2012-2013 迪赛普科技 版权所有
合作邮箱:admin@desipo.com 合作QQ:76052083 |