php在windows环境下获得cpu内存实时使用率(推荐)
后台实时监控服务器的CUP与内存占用率的场景很常见,虽然没做过,但是着手写代码之前我真没想到会花2个多小时才最终实现。
网上虽然搜PHPCUP内存使用率这一类关键字出来的文章一大把,但大都是在Linux环境下,windows下只有提出靠cmd语句实现的观点,但少有实际直接可行的代码,辗转试了一遍wmic,systeminfo各种并不熟稔的cmd命令,并没有找到可行的方案,最终通过百度知道的一篇答案找到利用vbs获取的实现方式,稍加改善,可以在windows环境下直接使用。
类代码
classSystemInfoWindows
{
/**
*判断指定路径下指定文件是否存在,如不存在则创建
*@paramstring$fileName文件名
*@paramstring$content文件内容
*@returnstring返回文件路径
*/
privatefunctiongetFilePath($fileName,$content)
{
$path=dirname(__FILE__)."\\$fileName";
if(!file_exists($path)){
file_put_contents($path,$content);
}
return$path;
}
/**
*获得cpu使用率vbs文件生成函数
*@returnstring返回vbs文件路径
*/
privatefunctiongetCupUsageVbsPath()
{
return$this->getFilePath(
'cpu_usage.vbs',
"OnErrorResumeNext
SetobjProc=GetObject(\"winmgmts:\\\\.\\root\cimv2:win32_processor='cpu0'\")
WScript.Echo(objProc.LoadPercentage)"
);
}
/**
*获得总内存及可用物理内存JSONvbs文件生成函数
*@returnstring返回vbs文件路径
*/
privatefunctiongetMemoryUsageVbsPath()
{
return$this->getFilePath(
'memory_usage.vbs',
"OnErrorResumeNext
SetobjWMI=GetObject(\"winmgmts:\\\\.\\root\cimv2\")
SetcolOS=objWMI.InstancesOf(\"Win32_OperatingSystem\")
ForEachobjOSincolOS
Wscript.Echo(\"{\"\"TotalVisibleMemorySize\"\":\"&objOS.TotalVisibleMemorySize&\",\"\"FreePhysicalMemory\"\":\"&objOS.FreePhysicalMemory&\"}\")
Next"
);
}
/**
*获得CPU使用率
*@returnNumber
*/
publicfunctiongetCpuUsage()
{
$path=$this->getCupUsageVbsPath();
exec("cscript-nologo$path",$usage);
return$usage[0];
}
/**
*获得内存使用率数组
*@returnarray
*/
publicfunctiongetMemoryUsage()
{
$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=newSystemInfoWindows();
$cpu=$info->getCpuUsage();
$memory=$info->getMemoryUsage();
echo"当前系统CPU使用率:{$cpu}%,内存使用率{$memory['usage']}%";
总结
以上所述是小编给大家介绍的php在windows环境下获得cpu内存实时使用率,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!