パフォーマンスカウンターの値をコマンドで収集する方法

パフォーマンスカウンターの値をコマンドで収集する方法

Wndows環境でシステムの稼働状況を確認する方法としては、パフォーマンスモニターでパフォーマンスカウンターの値を確認するのが一般的ですが、パフォーマンスカウンターの値はパフォーマンスモニター以外にコマンドでも確認することができます。

パフォーマンスカウンターの値をコマンドで収集するときは、typeperfコマンドやGet-Counterコマンドレットを使用します。

そこでここではWindows 10を例に、パフォーマンスカウンターのデータをtypeperfコマンドやGet-Counterコマンドレットで収集・保存する方法を紹介します。

typeperfコマンド

typeperfコマンドは、Windows XP時代から利用できるコマンドで、パフォーマンスカウンターの値を収集することができます。

パフォーマンスカウンターの一覧を取得

typeperfコマンドでパフォーマンスカウンターの値を取得する場合は、まず以下のコマンドを実行して、収集可能なカウンターの一覧を取得します。

私の環境で実行してみると、カウンターの総数は3200個ほどになりました。

> typeperf -q
> typeperf -q
\Hyper-V VM Virtual Device Pipe IO(*)\Receive Message Quota Exceeded
\Hyper-V VM Virtual Device Pipe IO(*)\Receive QoS - Total Message Delay Time (100ns)
\Hyper-V VM Virtual Device Pipe IO(*)\Receive QoS - Exempt Messages/sec
\Hyper-V VM Virtual Device Pipe IO(*)\Receive QoS - Non-Conformant Messages/sec
\Hyper-V VM Virtual Device Pipe IO(*)\Receive QoS - Conformant Messages/sec
\Hyper-V Virtual Machine Health Summary\Health Critical
\Hyper-V Virtual Machine Health Summary\Health Ok
\Storage QoS Filter - Flow(*)\Total Bandwidth quota Increment/sec.
\Storage QoS Filter - Flow(*)\Maximum Bandwidth.
\Storage QoS Filter - Flow(*)\Avg. Bandwidth.
\Storage QoS Filter - Flow(*)\Avg. IO Quota Replenishment Operations/sec.
-------------- 以下省略 --------------

カウンターの一覧をインスタンスとともに取得する場合は、以下のコマンドを実行します。

> typeperf -qx <オブジェクト名>

ただし、オブジェクト名なしで実行するとかなりの数になるので、インスタンスとともに取得する場合は、オブジェクト名を指定したほうが良いでしょう。

> typeperf -qx Processor
\Processor(0)\% Processor Time
\Processor(1)\% Processor Time
\Processor(2)\% Processor Time
\Processor(3)\% Processor Time
\Processor(_Total)\% Processor Time
-------------- 以下省略 --------------

パフォーマンスカウンターの値を収集

パフォーマンスカウンターの値を収集するときは、上のコマンドで表示された文字列をそのまま指定すればOKです。

たとえば、 CPU使用率データを収集する場合は、以下のようにコマンドを実行します。

> typeperf "\Processor(*)\% Processor Time"

カウンターを複数指定する場合は、スペースで区切って指定するか、収集したいカウンターを記述したテキストファイル(1行につき1つのカウンタ名を記述)を用意して指定することもできます。

> typeperf -cf counters.txt

コマンドを実行すると、画面上にパフォーマンスカウンターの値が、CSV形式で1秒ごとに表示されます。

なお、実行を停止するときは「Ctrl+C」キーを押します。

> typeperf "\Processor(*)\% Processor Time"

"(PDH-CSV 4.0)","\\PC-001\Processor(0)\% Processor Time","\\PC-001\Processor(1)\% Processor Time","\\PC-001\Processor(2)\% Processor Time","\\PC-001\Processor(3)\% Processor Time","\\PC-001\Processor(_Total)\% Processor Time"
"01/29/2020 09:12:32.870","2.185967","0.633363","2.185967","0.633363","1.409665"
"01/29/2020 09:12:33.880","2.403741","0.854594","0.854594","3.952888","2.016449"
"01/29/2020 09:12:34.890","0.000000","2.883450","1.341918","2.883450","1.727306"
"01/29/2020 09:12:35.902","0.804968","0.804968","2.354890","2.354890","1.579929"
"01/29/2020 09:12:36.911","3.984854","2.436223","0.887591","2.436223","2.436223"
"01/29/2020 09:12:37.920","2.461077","4.009314","14.846972","0.912840","5.557551"
                                      
コマンドは、正しく完了しました。

>

他のマシンのパフォーマンスカウンターの値を収集

他のマシンのパフォーマンスカウンターの値を収集する場合は、カウンター名の前にリモートマシン名を付けて、次のように実行します。

> typeperf "\\remote-pc\Processor(*)\% Processor Time"

出力フォーマットと出力先の指定

デフォルトの出力フォーマットはCSVで、出力先は標準出力(画面)ですが、出力フォーマットは「-f」で指定でき、「-o」でファイルに出力することができます。

以下のコマンドでは、出力フォーマットをバイナリに指定し、出力先を「counters.blg」としています。(バイナリで出力したファイルは、パフォーマンスモニターで読み込むことができます。)

> typeperf "\Processor(*)\% Processor Time" -f bin -o counters.blg

収集間隔とサンプリング数の指定

デフォルトでは、収集間隔は1秒で、サンプリング数は停止させるまでとなっていますが、収集間隔は「-si <hh:mm:ss>」で指定でき、サンプリング数は「-sc」で指定することができます。

以下のコマンドでは、5秒間隔でサンプリング数を10回に指定しています。

> typeperf "\Processor(*)\% Processor Time" -si 5 -sc 10

Get-Counterコマンドレット

Get-Counterコマンドレットは、パフォーマンスカウンターの値を収集できるPowerShellコマンドレットです。

パフォーマンスカウンターの一覧を取得

Get-Counterコマンドレットで収集可能なカウンターの一覧を取得するときは、以下のコマンドを実行します。

PS> Get-Counter -ListSet *

特定のカウンターセットの情報だけを取得したいときは、カウンターセット名を指定して実行します。

PS> Get-Counter -ListSet <カウンターセット名>

パフォーマンスカウンターの値をコマンドで収集する方法

パフォーマンスカウンターの値を収集

Get-Counterコマンドレットでパフォーマンスカウンターの値を収集するときは、以下のようにコマンドを実行します。(カウンターを複数指定する場合は、カンマで区切って指定します。)

たとえば、 CPU使用率データを収集する場合は、以下のようにコマンドを実行します。

PS> Get-Counter "\Processor Information(_Total)\% Processor Utility"

コマンドを実行すると、画面上にパフォーマンスカウンターの値が、表示されます。

パフォーマンスカウンターの値をコマンドで収集する方法

他のマシンのパフォーマンスカウンターの値を収集

Get-Counterコマンドレットで他のマシンのパフォーマンスカウンターの値を収集する場合は、以下のようにコマンドを実行します。

PS> Get-Counter "\Processor Information(_Total)\% Processor Utility" -ComputerName Server01,Server02

継続して収集

Get-Counterコマンドレットはデフォルトで1回のみ値を収集しますが、以下のように実行すると継続してパフォーマンスカウンターの値を収集できます。

PS> Get-Counter "\Processor Information(_Total)\% Processor Utility" -Continuous

間隔とサンプリング数の指定

Get-Counterコマンドレットで、収集間隔や収集回数を指定して実行したいときは、以下のようにコマンドを実行します。

以下のコマンドでは、2秒間隔でサンプリング回数を3回に設定しています。

PS> Get-Counter "\Processor Information(_Total)\% Processor Utility" -SampleInterval 2 -MaxSamples 3

取得した値を比較

Get-Counterコマンドレットで取得したパフォーマンスカウンターの値は、以下のようにWhere-Objectコマンドレットと組み合わせて簡単に値を比較することができ、パフォーマンスカウンターの値を監視するときなどで役立ちます。

PS> $counter = Get-Counter "\Processor Information(_Total)\% Processor Utility"
PS> $counter.CounterSamples | Where-Object { $_.CookedValue -gt "85" }

あとがき

パフォーマンスカウンターのデータを基に別の処理を行いたいときは、typeperfコマンドやGet-Counterコマンドレットを使えば便利ですよ。