当前位置:首页 > PHP教程 > php高级应用 > 列表

php在windows环境下获得cpu内存实时使用率(推荐)

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-03 11:10:21 浏览: 评论:0 

后台实时监控服务器的CUP与内存占用率的场景很常见,虽然没做过,但是着手写代码之前我真没想到会花2个多小时才最终实现。

网上虽然搜 PHP CUP 内存 使用率 这一类关键字出来的文章一大把,但大都是在Linux环境下,windows下只有提出靠cmd语句实现的观点,但少有实际直接可行的代码,辗转试了一遍 wmic , systeminfo 各种并不熟稔的cmd命令,并没有找到可行的方案,最终通过百度知道 的一篇答案找到利用vbs获取的实现方式,稍加改善,可以在windows环境下直接使用。

类代码

  1. class SystemInfoWindows 
  2.  /** 
  3.   * 判断指定路径下指定文件是否存在,如不存在则创建 
  4.   * @param string $fileName 文件名 
  5.   * @param string $content 文件内容 
  6.   * @return string 返回文件路径 
  7.   */ 
  8.  private function getFilePath($fileName$content
  9.  { 
  10.   $path = dirname(__FILE__) . "\\$fileName"
  11.   if (!file_exists($path)) { 
  12.    file_put_contents($path$content); 
  13.   } 
  14.   return $path
  15.  } 
  16.  /** 
  17.   * 获得cpu使用率vbs文件生成函数 
  18.   * @return string 返回vbs文件路径 
  19.   */ 
  20.  private function getCupUsageVbsPath() 
  21.  { 
  22.   return $this->getFilePath( 
  23.    'cpu_usage.vbs'
  24.    "On Error Resume Next 
  25.     Set objProc = GetObject(\"winmgmts:\\\\.\\root\cimv2:win32_processor='cpu0'\"
  26.     WScript.Echo(objProc.LoadPercentage)" 
  27.   ); 
  28.  } 
  29.  /** 
  30.   * 获得总内存及可用物理内存JSON vbs文件生成函数 
  31.   * @return string 返回vbs文件路径 
  32.   */ 
  33.  private function getMemoryUsageVbsPath() 
  34.  { 
  35.   return $this->getFilePath( 
  36.    'memory_usage.vbs'
  37.    "On Error Resume Next 
  38.     Set objWMI = GetObject(\"winmgmts:\\\\.\\root\cimv2\"
  39.     Set colOS = objWMI.InstancesOf(\"Win32_OperatingSystem\"
  40.     For Each objOS in colOS 
  41.      Wscript.Echo(\"{\"\"TotalVisibleMemorySize\"\":\" & objOS.TotalVisibleMemorySize & \",\"\"FreePhysicalMemory\"\":\" & objOS.FreePhysicalMemory & \"}\"
  42.     Next" 
  43.   ); 
  44.  } 
  45.  /** 
  46.   * 获得CPU使用率 
  47.   * @return Number 
  48.   */ 
  49.  public function getCpuUsage() 
  50.  { 
  51.   $path = $this->getCupUsageVbsPath(); 
  52.   exec("cscript -nologo $path"$usage); 
  53.   return $usage[0]; 
  54.  } 
  55.  /** 
  56.   * 获得内存使用率数组 
  57.   * @return array 
  58.   */ 
  59.  public function getMemoryUsage() 
  60.  { 
  61.   $path = $this->getMemoryUsageVbsPath(); 
  62.   exec("cscript -nologo $path"$usage); 
  63.   $memory = json_decode($usage[0], true); 
  64.   $memory['usage'] = Round((($memory['TotalVisibleMemorySize'] - $memory['FreePhysicalMemory']) / $memory['TotalVisibleMemorySize']) * 100); 
  65.   return $memory
  66.  } 

调用方式

  1. $info = new SystemInfoWindows(); 
  2. $cpu = $info->getCpuUsage(); 
  3. $memory = $info->getMemoryUsage(); 
  4. echo "当前系统CPU使用率:{$cpu}%,内存使用率{$memory['usage']}%";

Tags: php实时使用率 cpu使用率

分享到: