LoginSignup
3
8

More than 5 years have passed since last update.

PowerShell で Windows のパフォーマンスを観察しながらログに残す

Last updated at Posted at 2017-02-14

はじめに

この記事では PowerShell を使って Windows OS のパフォーマンスを観察しながらログに残す方法をまとめます。

パフォーマンスをログに残すためには「パフォーマンスモニター」を使う方法が現実的だと思います。ただ、パフォーマンスモニターはデータコレクタセットを定義する必要があったり、ログがバイナリだったりで「ちょっと調べたい」ときには使い勝手が悪いです。一方で、タスクマネージャを使うとパフォーマンスの概要はすぐに把握できるのですが、ログに残すことができません。

そういうわけで、いつものように PowerShell のコマンドコピペで解決できないか検討してみました。

方法

PowerShell の Get-Counter コマンドレットを使います。Get-Counter コマンドレットは PowerShell v3 以降で使用できます。

カウンタのパス(名前)はいつも忘れてしまうので、調べ方を覚えておくと便利です。以下のようにします。

PowerShell
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

おわりに

ログの採取状況を見ているとログが残っていることが分かって安心なのですが、普通にタスクマネージャを見ている方がパフォーマンスの変化は分かりやすいです。常に前面に表示できるし。

3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8