Windows 10でパフォーマンスカウンターのデータをコマンドで収集する方法(typeperf)

Windows 10でパフォーマンスカウンターのデータをコマンドで収集する方法(typeperf)

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

その一つとして、Windows XP時代から搭載されているのがtypeperfコマンドです。

typeperfコマンドは、パフォーマンスカウンタのデータを収集・保存できるコマンドで、収集するパフォーマンスカウンタを指定してコマンドを実行すると、一定間隔ごとにデータを収集し、その結果をCSV形式などで表示したり保存したりできます。

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

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit1909

typeperfコマンドの使い方

typeperfコマンドは、コマンドプロンプトやPowerShellで実行することができます。

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

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コマンドでは、その他にも次のような指定が可能です。

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

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

> 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

typeperfコマンドのヘルプ

参考までに、typeperfコマンドのヘルプは以下のとおりです。

> typeperf -?

Microsoft® TypePerf.exe (10.0.18362.1)

Typeperf は、パフォーマンス データをコマンド ウィンドウまたはログ ファイルに書き込みます。
Typeperf を停止するには、Ctrl+C キーを押します。

使い方:
typeperf { <カウンター [カウンター ...]> | -cf <ファイル名> | -q [オブジェクト] | -qx [オブジェクト] } [オプション]

パラメーター:
  <カウンター [カウンター ...]> 監視するパフォーマンス カウンターです。

オプション:
  -?                            状況に応じたヘルプを表示します。
  -f <CSV|TSV|BIN|SQL>          出力ファイルの形式です。既定は CSV です。
  -cf <ファイル名>              監視するパフォーマンス カウンターを含んでいるファイルです。1 行に 1 カウンターです。
  -si <[[hh:]mm:]ss>            サンプリングの間隔です。既定値は、1 秒です。
  -o <ファイル名>               出力ファイルまたは SQL データベースのパスです。既定値は、STDOUT です。
  -q [オブジェクト]             インストールされているカウンターの一覧を表示します (インスタンスなし)。1 つのオブジェクトに
                                対するカウンターを一覧表示するには、Processorのようにオブジェクト名を含めてください。
  -qx [オブジェクト]            インストールされているインスタンスの一覧を表示します。1 つのオブジェクトに対するカウンターを
                                一覧表示するには、Processor のようにオブジェクト名を含めてください。
  -sc <サンプリング>            収集するサンプリングの数です。既定値は、Ctrl+C を押すまでのサンプリングです。
  -config <ファイル名>          コマンド オプションが記述されている設定ファイルです。
  -s <コンピューター名>         カウンターのパスにサーバーが指定されていない場合に監視するサーバーです。
  -y                            すべての質問に対して確認を求めずに、"はい" で応答します。

Note:
  Counter is the full name of a performance counter in
  "\\<Computer>\<Object>(<Instance>)\<Counter>" format,
  such as "\\Server1\Processor(0)\% User Time".

例:
  typeperf "\Processor(_Total)\% Processor Time"
  typeperf -cf counters.txt -si 5 -sc 50 -f TSV -o domain2.tsv
  typeperf -qx PhysicalDisk -o counters.txt

あとがき

typeperfコマンドでは、パフォーマンスカウンターのデータがテキストで出力できるので、バッチファイルなどのスクリプトで、パフォーマンスカウンターのデータを基にした処理を行いたい場合に便利です。