2013-01-21 75 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%