2013-01-21 33 views
0

我正在为Linux使用wmi客户端。通过它你可以执行WQL来远程查询Windows服务器。从Linux上的WMI客户端获取CPU利用率

例如;

Select * from Win32_ComputerSystem 

我想要做的是计算使用的CPU百分比。

我一直从'Win32_PerfFormattedData_Counters_ProcessorInformation'获取'PercentProcessorTime'的值。我认为这对于具有单个CPU的计算机来说工作正常,但是我失去了如何计算具有多个CPU的计算机的CPU使用率。

任何帮助非常感谢。

欢呼声。

回答

2

如果你SELECT * FROM Win32_PerfFormattedData_Counters_ProcessorInformation那么你会得到一个结果集列表。第一组是所有CPU的总值,其余是各个CPU的值。

此代码显示了这个想法。请注意,您应该将SYSTEM替换为您要查询的计算机的名称。

use strict; 
use warnings; 

use Win32::OLE; 
use Win32::OLE::Variant; 

STDOUT->autoflush; 

my $wmi = Win32::OLE->GetObject('winmgmts:\\\\SYSTEM\root\cimv2') or die Win32::OLE->LastError; 
my $list = $wmi->ExecQuery('SELECT * FROM Win32_PerfFormattedData_Counters_ProcessorInformation'); 
my $n = 0; 
for my $cpu (in $list) { 
    printf "%s: %d%%\n", $n ? "CPU$n" : ' ALL', $cpu->PercentProcessorTime; 
    $n++; 
} 

输出

ALL: 8% 
CPU1: 8% 
CPU2: 12% 
CPU3: 6% 
CPU4: 12% 
CPU5: 6% 
CPU6: 6% 
CPU7: 6%