Hyper-VサーバーのCPU使用率

by manamana 25. June 2013 10:30

Hyper-Vのホスト端末でタスクマネージャを監視していても、サーバー全体のCPU使用率は表示されません。
これは、ホスト自体も仮想化されているため、タスクマネージャはホスト端末だけのCPU使用率を示すからです。
サーバー全体のCPU使用率を知りたい場合には、パフォーマンスモニターを利用するのが一般的でしょう。

パフォーマンス・モニタでHyper-Vサーバの実際のCPU使用率を調査する (@IT)

このパフォーマンスモニターですが、PowerShellからは Get-Counter コマンドレットで同様の情報を取得可能です。
そこで、Excel PowerShell Tool 上で CPU使用率を表示するシートを作ってみました。

#@PSTOOL

$ws = $_Excel.Activesheet
$addin = $_Excel.ComAddins.Item("ExPSTool").Object

#==== パフォーマンスモニター用の型定義(C#を利用)
$MyType = @"
    public class PerMonitorType {
        public string Timestamp;
        public double ProcessorTime;
        public double TotalRunTime;
    }
"@
#--- 型の追加(※既存の場合はエラーになるので SilentlyContinue)
Add-Type -TypeDefinition $MyType -ErrorAction:SilentlyContinue

$PerMonitor = New-Object -TypeName PerMonitorType 

#=== 使用するカウンター     
$counters = @(
    "\Processor(_total)\% Processor Time",
    "\Hyper-V Hypervisor Logical Processor(_total)\% Total Run Time"
)

#=== 変数の初期化
$List = $ws.ListObjects.Item("PerMonitorTable")
$top = $List.HeaderRowRange
$addin.SetStartRange($top)
$i = 0

#=== Get-Count のログを加工しながら出力(60回で先頭に戻る)
Get-Counter -Counter $counters -SampleInterval 1 -Continuous | foreach {
    $PerMonitor.Timestamp = $_.Timestamp.ToString("hh:mm:ss")
    $PerMonitor.ProcessorTime = $_.CounterSamples[0].CookedValue
    $PerMonitor.TotalRunTime =  $_.CounterSamples[1].CookedValue

    $PerMonitor            #←これで出力
    $i += 1
    if ($i -gt 60) {
        $addin.SetStartRange($top)
        $i = 0
    }
}

このスクリプトは Get-Counter の -Continuous オプションを利用して、CPU利用率を取得し続けます。
ここでは、ホスト端末のCPU使用率である  "\Processor(_total)\% Processor Time" と、
Hyper-Vを含めたサーバー全体のCPU使用率である "\Hyper-V Hypervisor Logical Processor(_total)\% Total Run Time"
指定してやり、 それを専用の PerMonitorType型変数 $PerMonitor に代入後に出力しています。
Add-Type による独自の型定義はとても便利なので参考にしてください。
 
 
殆どの場合、TotalRunTime > ProcessorTime になりますが、たまに逆転します。たぶん誤差です。
 
 
 
 
ホスト端末でHD動画を再生してやると ProcessorTime が跳ね上がります。
 
 
 
 
仮想端末でHD動画を再生すると、TotalRunTime部分だけが跳ね上がります。
 
 
 
 
PS Tool は、PowerShell から得られた情報をそのまま Excel 上に展開します。
それをグラフ等に連動させることにより簡単にくモニターシステムが構築できるわけです。
ただし、Excelの制限もありリアルタイム性には欠けます。
このスクリプトでは、1秒毎に情報を更新したかったのですが、私の環境では約2秒毎になってしまいました。
知人の新モデルでは普通に更新できるのですが…orz
 
ダウンロード↓↓↓ 
CPU使用率.xlsx (20.55 kb)

Tags:

Hyper-V | PowerShell

Add comment


スポンサーリンク

Calendar

<<  September 2019  >>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

View posts in large calendar

Month List

Twitter