后台实时监控服务器的cup与内存占用率的场景很常见,虽然没做过,但是着手写代码之前我真没想到会花2个多小时才最终实现。
网上虽然搜 php cup 内存 使用率 这一类关键字出来的文章一大把,但大都是在linux环境下,windows下只有提出靠cmd语句实现的观点,但少有实际直接可行的代码,辗转试了一遍 wmic , systeminfo 各种并不熟稔的cmd命令,并没有找到可行的方案,最终通过百度知道 的一篇答案找到利用vbs获取的实现方式,稍加改善,可以在windows环境下直接使用。
类代码
class systeminfowindows
{
/**
* 判断指定路径下指定文件是否存在,如不存在则创建
* @param string $filename 文件名
* @param string $content 文件内容
* @return string 返回文件路径
*/
private function getfilepath($filename, $content)
{
$path = dirname(__file__) . "\$filename";
if (!file_exists($path)) {
file_put_contents($path, $content);
}
return $path;
}
/**
* 获得cpu使用率vbs文件生成函数
* @return string 返回vbs文件路径
*/
private function getcupusagevbspath()
{
return $this->getfilepath(
'cpu_usage.vbs',
"on error resume next
set objproc = getobject("winmgmts:\\.\rootcimv2:win32_processor='cpu0'")
wscript.echo(objproc.loadpercentage)"
);
}
/**
* 获得总内存及可用物理内存json vbs文件生成函数
* @return string 返回vbs文件路径
*/
private function getmemoryusagevbspath()
{
return $this->getfilepath(
'memory_usage.vbs',
"on error resume next
set objwmi = getobject("winmgmts:\\.\rootcimv2")
set colos = objwmi.instancesof("win32_operatingsystem")
for each objos in colos
wscript.echo("{""totalvisiblememorysize"":" & objos.totalvisiblememorysize & ",""freephysicalmemory"":" & objos.freephysicalmemory & "}")
next"
);
}
/**
* 获得cpu使用率
* @return number
*/
public function getcpuusage()
{
$path = $this->getcupusagevbspath();
exec("cscript -nologo $path", $usage);
return $usage[0];
}
/**
* 获得内存使用率数组
* @return array
*/
public function getmemoryusage()
{
$path = $this->getmemoryusagevbspath();
exec("cscript -nologo $path", $usage);
$memory = json_decode($usage[0], true);
$memory['usage'] = round((($memory['totalvisiblememorysize'] - $memory['freephysicalmemory']) / $memory['totalvisiblememorysize']) * 100);
return $memory;
}
}
调用方式
$info = new systeminfowindows();
$cpu = $info->getcpuusage();
$memory = $info->getmemoryusage();
echo "当前系统cpu使用率:{$cpu}%,内存使用率{$memory['usage']}%";
总结
以上所述是小编给大家介绍的php在windows环境下获得cpu内存实时使用率,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对硕编程网站的支持!
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!