如何在Windows上以PHP的形式获取每个CPU Core的负载?

时间:2013-01-24 09:13:43

标签: php windows load wmi core

有没有办法这样做? 我尝试使用WMIWin32_PerfRawData_PerfOS_Processor类,我最终得到PercentProcessorTimeTimestamp_PerfTime这需要睡一会儿来计算百分比,但那不是什么我需要,我需要的东西不需要PHP等待几秒钟,它应该几乎立即打印出负载

3 个答案:

答案 0 :(得分:0)

一种方法是让另一个程序持续检查并记录处理器负载,在那里PHP可以直接读取值。记录可能会略有延迟,但不会像几秒钟那样。

您可以在单独的PHP脚本中执行此操作。只需确保在检查之间暂停(),否则处理器读取脚本会立即将处理器推到最大负载。

答案 1 :(得分:0)

您可以使用XPerf,记录CPU活动,然后通过PHP访问这些日志文件?在this one等帖子中还有其他建议,建议尝试Linfo

答案 2 :(得分:0)

我知道这是一个老帖子,但我在同一个位置,但后来却管理好了。

而不是使用

Win32_PerfRawData_PerfOS_Processor

使用

Win32_PerfFormattedData_PerfOS_Processor

例如

$data['core']  = array();
$wmi           = new COM("winmgmts:\\");
$cpu_cores     = $wmi->execquery("SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor");

foreach ($cpu_cores as $core) {
    $data['core'][] = $core->PercentProcessorTime;
}

// If CPU Is A Dual Core 
echo $data['core'][0].'%'; // CORE 1 LOAD
echo $data['core'][1].'%'; // CORE 2 LOAD
echo $data['core'][2].'%'; // TOTAL CPU LOAD

// If CPU Is A Quad Core 
echo $data['core'][0].'%'; // CORE 1 LOAD
echo $data['core'][1].'%'; // CORE 2 LOAD
echo $data['core'][2].'%'; // CORE 3 LOAD
echo $data['core'][3].'%'; // CORE 4 LOAD
echo $data['core'][4].'%'; // TOTAL CPU LOAD

And So On