天天看點

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);

//格式如下:

//經計算得到下式、

if(count($arr)>10){

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

}else{

$num=0;

}

echo "目前Mysql的連接配接數為:".$num;

?>