当前位置: 首页 > 编程笔记 >

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

吴哲
2023-03-14
本文向大家介绍php在windows环境下获得cpu内存实时使用率(推荐),包括了php在windows环境下获得cpu内存实时使用率(推荐)的使用技巧和注意事项,需要的朋友参考一下

后台实时监控服务器的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:\\\\.\\root\cimv2: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:\\\\.\\root\cimv2\")
    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内存实时使用率,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 问题内容: 我的Go程序需要知道所有系统和用户进程的当前cpu使用率。 我如何获得? 问题答案: 我遇到了类似的问题,但从未找到轻量级的实现。这是我的解决方案的精简版,可以回答您的特定问题。我按照tylerl的建议对文件进行采样。您会注意到,我在两次采样之间等待3秒以匹配top的输出,但是在1或2秒的情况下我也取得了不错的结果。我在go例程中的循环中运行类似的代码,然后在需要其他go例程时访问cp

  • 本文向大家介绍Linux下使用python调用top命令获得CPU利用率,包括了Linux下使用python调用top命令获得CPU利用率的使用技巧和注意事项,需要的朋友参考一下 本文定位:想通过python调用top命令获取cpu使用率但暂时没有思路的情况。 如果单纯为了获得cpu的利用率,通过top命令重定向可以轻松实现,命令如下: 或 这个就不解释了,不懂的朋友查询下top的帮助文档。这里要

  • 问题内容: 可以说,钱不是限制因素,我想编写一个在一台功能强大的计算机上运行的Java程序。 目的是使Java程序 尽可能快地运行,而不必 为任何事情 交换或进入磁盘 。 假设这台计算机具有: 1 TB RAM(64个16GB DIMM) 64个处理器核心(8个8核处理器) 运行64位Ubuntu 运行在JVM中的Java程序的单个实例能否利用这么多的RAM和处理器? 是否有任何实际的考虑因素可能

  • 本文向大家介绍在Windows环境下使用MySQL:实现自动定时备份,包括了在Windows环境下使用MySQL:实现自动定时备份的使用技巧和注意事项,需要的朋友参考一下 一、编写备份脚本 这是一段很常见的windows批处理脚本文件,我来简单解释一下其中的关键部分: forfiles 用来对备份目录下的过期备份进行删除。“E:\mysql\MySQL BackUp”是备份文件所在的路径,可以自行

  • 问题内容: 我正在尝试获取%的总CPU使用率。首先,我首先要说“ top”根本不会做,因为cpu转储之间会有延迟,它需要2个转储和几秒钟的时间,这使我的程序挂起(我不想给它自己的线程) 我尝试的下一件事情是“ ps”,它是即时的,但总的总数总是很高(超过20),当我实际上让我的cpu做某事时,它保持在20左右… 还有其他方法可以获取总的CPU使用率吗?超过一秒还是更长的时间都没有关系……但是更长的

  • 本文向大家介绍windows环境下Redis+Spring缓存实例讲解,包括了windows环境下Redis+Spring缓存实例讲解的使用技巧和注意事项,需要的朋友参考一下 一、Redis了解 1.1、Redis介绍: redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(