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コマンドレットを使えば便利ですよ。