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

问题描述 投票:0回答:3

有办法吗? 我尝试使用

WMI
Win32_PerfRawData_PerfOS_Processor
类,我最终得到了
PercentProcessorTime
Timestamp_PerfTime
,这需要睡一会儿才能计算百分比,但这不是我需要的,我需要一些可以做到的东西不需要 PHP 等待几秒钟,它应该几乎立即打印出负载

php windows load wmi cpu-cores
3个回答
0
投票

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

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


0
投票

您可以使用 XPerf 记录 CPU 活动,然后通过 PHP 访问这些日志文件?线程中还有其他建议,例如 this one,建议尝试一下 Linfo


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 
© www.soinside.com 2019 - 2024. All rights reserved.