php获取cpu与内存使用情况的代码一例

发布时间:2020-07-16编辑:脚本学堂
本篇文章介绍了,如何用php获取cpu与内存使用情况的代码,有需要的朋友,可以参考看看。

以下代码适用于linux/freebsd环境下查看内存与Cpu使用情况。

代码如下:
 

复制代码 代码示例:

<?php
/*
@系统参数探测 LINUX
@Edit www.jb200.com
@date 2013/5/8
*/
function sys_linux()
{
// CPU
if (false === ($str = @file(“/proc/cpuinfo”))) return false;
$str = implode(“”, $str);
@preg_match_all(“/models+names{0,}:+s{0,}([ws)(.]+)[rn]+/”, $str, $model);
//@preg_match_all(“/cpus+MHzs{0,}:+s{0,}([d.]+)[rn]+/”, $str, $mhz);
@preg_match_all(“/caches+sizes{0,}:+s{0,}([d.]+s{0,}[A-Z]+[rn]+)/”, $str, $cache);
if (false !== is_array($model[1]))
{
$res['cpu']['num'] = sizeof($model[1]);
for($i = 0; $i < $res['cpu']['num']; $i++)
{
$res['cpu']['detail'][] = “类型:”.$model[1][$i].” 缓存:”.$cache[1][$i];
}
if (false !== is_array($res['cpu']['detail'])) $res['cpu']['detail'] = implode(”
“, $res['cpu']['detail']);
}

// UPTIME
if (false === ($str = @file(“/proc/uptime”))) return false;
$str = explode(” “, implode(“”, $str));
$str = trim($str[0]);
$min = $str / 60;
$hours = $min / 60;
$days = floor($hours / 24);
$hours = floor($hours – ($days * 24));
$min = floor($min – ($days * 60 * 24) – ($hours * 60));
if ($days !== 0) $res['uptime'] = $days.”天”;
if ($hours !== 0) $res['uptime'] .= $hours.”小时”;
$res['uptime'] .= $min.”分钟”;

// MEMORY
if (false === ($str = @file(“/proc/meminfo”))) return false;
$str = implode(“”, $str);
preg_match_all(“/MemTotals{0,}:+s{0,}([d.]+).+?MemFrees{0,}:+s{0,}([d.]+).+?SwapTotals{0,}:+s{0,}([d.]+).+?SwapFrees{0,}:+s{0,}([d.]+)/s”, $str, $buf);

$res['memTotal'] = round($buf[1][0]/1024, 2);
$res['memFree'] = round($buf[2][0]/1024, 2);
$res['memUsed'] = ($res['memTotal']-$res['memFree']);
$res['memPercent'] = (floatval($res['memTotal'])!=0)?round(($res['memUsed']/$res['memTotal'])*90,2):0;

$res['swapTotal'] = round($buf[3][0]/1024, 2);
$res['swapFree'] = round($buf[4][0]/1024, 2);
$res['swapUsed'] = ($res['swapTotal']-$res['swapFree']);
$res['swapPercent'] = (floatval($res['swapTotal'])!=0)?round(($res['swapUsed']/$res['swapTotal'])*90,2):0;

// LOAD AVG
if (false === ($str = @file(“/proc/loadavg”))) return false;
$str = explode(” “, implode(“”, $str));
$str = array_chunk($str, 3);
$res['loadAvg'] = implode(” “, $str[0]);

return $res;
}
/*
系统参数探测 FreeBSD
*/
function sys_freebsd()
{
//CPU
if (false === ($res['cpu']['num'] = get_key(“hw.ncpu”))) return false;
$res['cpu']['detail'] = get_key(“hw.model”);

//LOAD AVG
if (false === ($res['loadAvg'] = get_key(“vm.loadavg”))) return false;
$res['loadAvg'] = str_replace(“{“, “”, $res['loadAvg']);
$res['loadAvg'] = str_replace(“}”, “”, $res['loadAvg']);

//UPTIME
if (false === ($buf = get_key(“kern.boottime”))) return false;
$buf = explode(‘ ‘, $buf);
$sys_ticks = time() – intval($buf[3]);
$min = $sys_ticks / 60;
$hours = $min / 60;
$days = floor($hours / 24);
$hours = floor($hours – ($days * 24));
$min = floor($min – ($days * 60 * 24) – ($hours * 60));
if ($days !== 0) $res['uptime'] = $days.”天”;
if ($hours !== 0) $res['uptime'] .= $hours.”小时”;
$res['uptime'] .= $min.”分钟”;

//MEMORY
if (false === ($buf = get_key(“hw.physmem”))) return false;
$res['memTotal'] = round($buf/1024/1024, 2);
$buf = explode(“n”, do_command(“vmstat”, “”));
$buf = explode(” “, trim($buf[2]));

$res['memFree'] = round($buf[5]/1024, 2);
$res['memUsed'] = ($res['memTotal']-$res['memFree']);
$res['memPercent'] = (floatval($res['memTotal'])!=0)?round(($res['memUsed']/$res['memTotal'])*90,2):0;

$buf = explode(“n”, do_command(“swapinfo”, “-k”));
$buf = $buf[1];
preg_match_all(“/([0-9]+)s+([0-9]+)s+([0-9]+)/”, $buf, $bufArr);
$res['swapTotal'] = round($bufArr[1][0]/1024, 2);
$res['swapUsed'] = round($bufArr[2][0]/1024, 2);
$res['swapFree'] = round($bufArr[3][0]/1024, 2);
$res['swapPercent'] = (floatval($res['swapTotal'])!=0)?round(($res['swapUsed']/$res['swapTotal'])*90,2):0;

return $res;
}

/*
取得参数值 FreeBSD
*/
function get_key($keyName)
{
return do_command(‘sysctl’, “-n $keyName”);
}

/*
确定执行文件位置 FreeBSD
*/
function find_command($commandName)
{
$path = array(‘/bin’, ‘/sbin’, ‘/usr/bin’, ‘/usr/sbin’, ‘/usr/local/bin’, ‘/usr/local/sbin’);
foreach($path as $p)
{
if (@is_executable(“$p/$commandName”)) return “$p/$commandName”;
}
return false;
}

/*
执行系统命令 FreeBSD
*/
function do_command($commandName, $args)
{
$buffer = “”;
if (false === ($command = find_command($commandName))) return false;
if ($fp = @popen(“$command $args”, ‘r’))
{
while (!@feof($fp))
{
$buffer .= @fgets($fp, 4096);
}
return trim($buffer);
}
return false;
}
?>

说明:
memory用此函数可搞定: memory_get_usage()
在Windows下面只能读取cmd命令运行的结果。
例如:
 

复制代码 代码示例:
<?php
$a = system(‘mem’);
echo $a.”
“;
//或者
$a = system(‘mem’);
echo $a.”
“;
?>

您可能感兴趣的文章:
php获取CPU使用情况的代码
php中使用proc/loadavg监控CPU的平均负载
php记录服务器负载、内存、cpu状态的代码
php页面缓存的例子(减经cpu与mysql负担)
php获取linux服务器CPU、内存、硬盘使用率的实现代码
php获取计算机唯一标识信息(cpu,网卡,MAC地址)的代码
PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系
php程序随机记录mysql rand()造成CPU 100%的解决方法
php获取CPU使用信息