はじめに
この記事では PowerShell を使って Windows OS のパフォーマンスを観察しながらログに残す方法をまとめます。
パフォーマンスをログに残すためには「パフォーマンスモニター」を使う方法が現実的だと思います。ただ、パフォーマンスモニターはデータコレクタセットを定義する必要があったり、ログがバイナリだったりで「ちょっと調べたい」ときには使い勝手が悪いです。一方で、タスクマネージャを使うとパフォーマンスの概要はすぐに把握できるのですが、ログに残すことができません。
そういうわけで、いつものように PowerShell のコマンドコピペで解決できないか検討してみました。
方法
PowerShell の Get-Counter
コマンドレットを使います。Get-Counter
コマンドレットは PowerShell v3 以降で使用できます。
カウンタのパス(名前)はいつも忘れてしまうので、調べ方を覚えておくと便利です。以下のようにします。
PS1 > # 対象のカウンタの目星が付いてない場合は
PS1 > # とりあえず全てのカウンタを表示して Description を眺めてみる。
PS1 > Get-Counter -ListSet *
PS1 >
PS1 > # 例えばメモリについて知りたいとき
PS1 > # 以下のようにしてメモリに関するカウンタを一覧します
PS1 > Get-Counter -ListSet Memory | Select-Object -ExpandProperty Paths
\Memory\Page Faults/sec
\Memory\Available Bytes
\Memory\Committed Bytes
\Memory\Commit Limit
\Memory\Write Copies/sec
\Memory\Transition Faults/sec
\Memory\Cache Faults/sec
\Memory\Demand Zero Faults/sec
\Memory\Pages/sec
...
コマンド
以下のコマンドを PowerShell コンソールにコピペすると、カレントディレクトリにログが出力されます。ログの採取を停止するには Ctrl+C
を押下します。
$counters = "\Processor(_total)\% processor time", "\Memory\available bytes"
Get-Counter -Counter $counters -Continuous | % {
$p = New-Object PSObject | Add-Member -PassThru NoteProperty TimeStamp $_.TimeStamp
$_.CounterSamples | % { $p | Add-Member NoteProperty $_.Path $_.CookedValue }
$p
} | ConvertTo-CSV -NTI | Out-File Perf.csv
ログの採取状況を見るには、新しく PowerShell を起動して、以下のコマンドを実行します。
PS1 > cat .\Perf.csv -wait | ConvertFrom-Csv
おわりに
ログの採取状況を見ているとログが残っていることが分かって安心なのですが、普通にタスクマネージャを見ている方がパフォーマンスの変化は分かりやすいです。常に前面に表示できるし。