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

调用方式

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

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

分享到: