php监控系统,php 系统监控 | 学步园

系统监控,在我的理解,就是cpu使用率,内存使用,硬盘使用,进程等等情况。

而这些东西,对于很多科班的童鞋来说,应该都很简单。在命令行中输入几个命令就完事了。但是用php如何去做呢?这个问题,我想了很久,最后无意中在网上找到了几个可以执行外部命令的函数,顿时让我十分的惊喜。

1.exec().与 shell_exec() 相似,不同之处是它返回输出的最后一行,并且可选地用命令的完整输出和错误代码填充数组.exec($command,$array)  $array 为结果

2.shell_exec     等同于``(单撇号)  执行命令,返回结果为字符串。

3.passthru()     直接将结果输出到浏览器上 ,不返回任何值。

4.system()         直接将结果输出到浏览器上,执行成功返回true,失败返回false

知道了这几个函数,那就很简单了,基本的思路就是取到shell命令的结果,再用正则取到我们想要的值。

header("Content-type: text/html; charset=utf-8");

//CPU使用率

$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]+)/";

preg_match_all($pattern, $str, $out);

echo "CPU使用率:".'
';

echo "共有".(count($out[1])-1)."个CPU,每个CPU利用率如下:
";

for($n=1;$n

{

echo $out[1][$n]."=".number_format((100*($out[1][$n]+$out[2][$n]+$out[3][$n])/($out[4][$n]+$out[5][$n]+$out[6][$n]+$out[7][$n])),4,'.','')."%
";

}

echo "***************************************************************".'
';

//内存使用情况

$str = shell_exec('more /proc/meminfo');

$pattern = "/(.+):\s*([0-9]+)/";

preg_match_all($pattern, $str, $out);

$mem=getRealSize($out[2][0]);

$used=getRealSize($out[2][1]);

$useable=getRealSize(($out[2][0]-$out[2][1]));

echo "内存使用情况:".'
';

echo "物理内存总量:".$mem."
";

echo "已使用的内存:".$useable."
";

echo "可使用内存:".$used."
";

echo "***************************************************************".'
';

//计算内存大小

function getRealSize($size)

{

$mb = 1024;         // MB

$gb = 1024 * $mb;   // GB

$tb = 1024 * $gb;   // TB

if($size < $mb){

return $size." KB";

}else if($size < $gb){

return round($size/$mb,2)." MB";

}else if($size < $tb){

return round($size/$gb,2)." GB";

}else{

return round($size/$tb,2)." TB";

}

}

//硬盘使用情况

$str = shell_exec('df -h');

#var_dump($str);

$arr = preg_split('/[,\s]+/', trim($str));

$arr = array_slice($arr,7);

#var_dump($arr);

$arr = array_chunk($arr,6);

#var_dump($arr);

echo "硬盘各个分区使用情况如下:";

#var_dump($arr);

?>

文件系统容量已用可用已用百分比挂载点

foreach($arr as $v){

echo "

";

for($i=0;$i

echo "

".$v[$i]."";

}

echo "

";

}

?>

echo "***************************************************************".'
';

//指定进程运行个数

echo "我们假设指定进程为httpd".'
';

$http = shell_exec("ps ax|grep 'httpd' -c");

#shell_exec("ps axu|grep 'httpd'|wc -l");

if($http>2){

echo "Httpd进程的运行个数为:".($http-2).'
';

//这里减去2的意思,是因为浏览器运行的时候,开启了一个,shell命令执行的时候,开启了一个。额,我是这么理解的,不知道对不对

}else{

echo "Httpd进程的运行个数为:0
";

}

echo "***************************************************************".'
';

?>

//Mysql连接数

$mysql_conn = shell_exec("/usr/local/lamp/mysql/bin/mysqladmin -uroot -phexinroot processlist");

$str= str_replace(array("-","+"),"",$mysql_conn);

$arr=explode('|',$str);

//格式如下:

/*array(19) { [0]=> string(1) " " [1]=> string(4) " Id " [2]=> string(6) " User " [3]=> string(11) " Host "

[4]=> string(4) " db " [5]=> string(9) " Command " [6]=> string(6) " Time " [7]=> string(7) " State "

[8]=> string(18) " Info " [9]=> string(2) " " [10]=> string(4) " 89 " [11]=> string(6) " root "

[12]=> string(11) " localhost " [13]=> string(4) " " [14]=> string(9) " Query " [15]=> string(6) " 0 "

[16]=> string(7) " " [17]=> string(18) " show processlist " [18]=> string(2) " " }

var_dump($arr);

*/

//经计算得到下式、

if(count($arr)>10){

$num=ceil((count($arr)-10)/9);

}else{

$num=0;

}

echo "当前Mysql的连接数为:".$num;

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值