経緯
Windows上にて作ったプログラム動作中のシステムの負荷状況(CPU、メモリ、通信量)などを確認したいけど、
Windows標準のタスクマネージャーや、リソースモニターを目視で確認してもログとしては使いにくいので、
何かないか調べたところ、typeperf
コマンドを使えば、同様の情報を拾えて、CSV形式にに保存できそうでしたので、
使い方を調べて使ってみました。
パフォーマンスカウンターの一覧取得
typeperf
コマンドで監視できる対象(パフォーマンスカウンター)は大量にあります。
以下コマンドにて、パフォーマンスカウンター一覧を表示することができます。
以下に何パターンかコマンド例を記載します。
オブジェクトの一覧表示
インスタンスが存在する場合は(*)
表示で省略されます。
全オブジェクトのカウンタ一覧
typeperf -q
指定したオブジェクトのカウンタ一覧
typeperf -q オブジェクト名
実行例(processorオブジェクトを指定時)
> typeperf -q "processor"
\processor(*)\% Processor Time
\processor(*)\% User Time
\processor(*)\% Privileged Time
\processor(*)\Interrupts/sec
\processor(*)\% DPC Time
\processor(*)\% Interrupt Time
\processor(*)\DPCs Queued/sec
\processor(*)\DPC Rate
\processor(*)\% Idle Time
\processor(*)\% C1 Time
\processor(*)\% C2 Time
\processor(*)\% C3 Time
\processor(*)\C1 Transitions/sec
\processor(*)\C2 Transitions/sec
\processor(*)\C3 Transitions/sec
オブジェクト・インスタンスの一覧表示
全オブジェクトのインスタンス・カウンタ一覧
typeperf -qx
指定したオブジェクトのインスタンス・カウンタ一覧
typeperf -qx オブジェクト名
実行例(processorオブジェクトを指定時)
> typeperf -qx "processor"
\processor(0)\% Processor Time
\processor(1)\% Processor Time
\processor(2)\% Processor Time
\processor(3)\% Processor Time
\processor(4)\% Processor Time
\processor(5)\% Processor Time
\processor(6)\% Processor Time
\processor(7)\% Processor Time
\processor(_Total)\% Processor Time
\processor(0)\% User Time
\processor(1)\% User Time
\processor(2)\% User Time
~~~~~大量に出るので省略~~~~~
\processor(4)\C3 Transitions/sec
\processor(5)\C3 Transitions/sec
\processor(6)\C3 Transitions/sec
\processor(7)\C3 Transitions/sec
\processor(_Total)\C3 Transitions/sec
パフォーマンスカウンターの監視を実施
パフォーマンスカウンターの監視
typeperf "パフォーマンスカウンター名"
- 複数のパフォーマンスカウンタを出したい場合は、続けて記載する
- インスタンス部分に
(*)
とした場合は、全インスタンスを指定となる -
Ctrl+C
を押すまでサンプリング継続される
実行例(CPUトータルの使用率+CPUトータルの待機時間率)
> typeperf "\processor(_Total)\% Processor Time" "\processor(_Total)\% Idle Time"
"(PDH-CSV 4.0)","\\XXXXXXXX\processor(_Total)\% Processor Time","\\XXXXXXXX\processor(_Total)\% Idle Time"
"12/13/2020 20:41:12.395","7.149553","89.955455"
"12/13/2020 20:41:13.404","6.673767","90.668151"
"12/13/2020 20:41:14.415","7.438474","91.027614"
"12/13/2020 20:41:15.418","6.678228","91.790523"
"12/13/2020 20:41:16.427","4.955068","91.664405"
"12/13/2020 20:41:17.429","6.121536","90.849692"
"12/13/2020 20:41:18.432","5.840923","91.207533"
"12/13/2020 20:41:19.436","6.975601","90.252590"
"12/13/2020 20:41:20.438","19.165862","79.704914"
"12/13/2020 20:41:21.450","14.454969","84.504989"
"12/13/2020 20:41:22.473","8.685111","88.117535"
"12/13/2020 20:41:23.479","12.503927","85.379233"
"12/13/2020 20:41:24.482","12.084388","86.591503"
"12/13/2020 20:41:25.492","21.662629","76.774804"
"12/13/2020 20:41:26.501","11.150328","87.014298"
"12/13/2020 20:41:27.508","12.023045","87.517754"
"12/13/2020 20:41:28.511","5.474416","91.997837"
- サンプリングレートや出力形式などはオプションで指定可能なので、いじりたい場合はヘルプ
-?
を見て使ってみてください。
利用できそうなパフォーマンスカウンター
パフォーマンスカウンター名 | 内容 |
---|---|
\processor(_Total)% Processor Time | CPU使用率(トータル) |
\processor(*)% Processor Time | CPU使用率(各CPU毎) |
\System\Processor Queue Length | CPU空き待ちスレッド数 |
\Network Interface(*)\Bytes Total/sec | ネットワーク/インタフェース毎の 送受信速度 |
\Network Interface(*)\Bytes Received/sec | ネットワーク/インタフェース毎の 受信速度 |
\Network Interface(*)\Bytes Sent/sec | ネットワーク/インタフェース毎の 送信速度 |
\Network Adapter(*)\Bytes Total/sec | ネットワーク/アダプタ毎の 送受信速度 |
\Network Adapter(*)\Bytes Received/sec | ネットワーク/アダプタ毎の 受信速度 |
\Network Adapter(*)\Bytes Sent/sec | ネットワーク/アダプタ毎の 送信速度 |
\Memory\Available MBytes | メモリ/利用可能な物理メモリ量(残容量) |
\Memory\Cache Faults/sec | メモリ/キャッシュFault発生回数 |
\Memory\Pages/sec | メモリ/ページング発生回数 |
\PhysicalDisk(*)% Idle Time | 物理ディスクのアイドル時間率 |
\PhysicalDisk(*)\Disk Reads/sec | 物理ディスクの読込要求数 |
\PhysicalDisk(*)\Disk Writes/sec | 物理ディスクの書込要求数 |
\PhysicalDisk(*)\Disk Read Bytes/sec | 物理ディスクの読込速度 |
\PhysicalDisk(*)\Disk Write Bytes/sec | 物理ディスクの書込速度 |