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


Posted in PHP onFebruary 08, 2018

后台实时监控服务器的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内存实时使用率,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php中mysql模块部分功能的简单封装
Sep 30 PHP
深入PHP异步执行的详解
Jun 03 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
php 在windows下配置虚拟目录的方法介绍
Jun 26 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
PHP的全局错误处理详解
Apr 25 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 #PHP
php处理抢购类功能的高并发请求
Feb 08 #PHP
php+redis实现商城秒杀功能
Nov 19 #PHP
php+redis消息队列实现抢购功能
Feb 08 #PHP
PHP多线程模拟实现秒杀抢单
Feb 07 #PHP
PHP设计模式之装饰器模式实例详解
Feb 07 #PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 #PHP
You might like
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php命名空间学习详解
2014/02/27 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
ASP SQL防注入的方法
2008/12/25 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
python 图片验证码代码分享
2012/07/04 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
python 容器总结整理
2017/04/04 Python
基于python时间处理方法(详解)
2017/08/14 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
25道Java面试题集合
2013/05/21 面试题
幼儿园保育员辞职信
2014/01/12 职场文书
市场开发计划书
2014/05/07 职场文书
会计工作总结范文2014
2014/12/23 职场文书
招商银行工作证明
2015/06/17 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
Golang连接并操作MySQL
2022/04/14 MySQL