Windows Server のパフォーマンス解析入門(その2) -パフォーマンスモニターでリソース不足を調査する-

前回はタスクマネージャーについて書きましたので、今回はパフォーマンス モニターについて書いていきます。パフォーマンス モニターの使い方についてはインターネット上に良い記事がたくさんありますので今回は触れず、どのパフォーマンス カウンターを確認するかを書いていこうと思います。ただし、これらは私が普段よく見るポイントですので全てのシステムに適用できるとは限りません。ご注意ください。

Queue Length を確認する

ハードウェアの性能が不足しているかどうかを確認する場合、私はそれぞれのリソースの Queue の値を確認します。CPUの場合は[System\Processor Queue Length]、ストレージの場合は [PhysicalDisk\Current Disk Queue Length]、ネットワークの場合は [Network Adapter\Output Queue Length] というカウンターです。

サンプルとしてCPUのベンチマークソフトを動かした際の [System\Processor Queue Length] を表示してみました。
新しいビットマップ イメージ

このサンプルでは1秒間隔でデータを取得していますが、Queue length が最大33を記録しています。ボトルネックになっているか判断するための閾値については文献によって様々なのですが、私はシステムに搭載されているCPUコアの数よりも大きな数字が連続して記録されている場合はボトルネックになっている可能性が高いと考えます。もし大きな数字が記録されていても数秒後には低い数字になっている場合、瞬間的にたくさんの処理が必要になったものの数秒で完了したと考えられるのであまり気にしなくてもよいと思います。

このカウンターは簡単にCPUのリソース不足を表すので便利なのですが、前回の記事でも出てきたようなシングルスレッドアプリケーションの場合はうまく検知できません。その場合は [Thread\%Processor Time] の値を確認するようにしています。この値が100に近い状態で推移する場合はCPUの1コアあたりの性能が足りないと推測できます。
新しいビットマップ イメージ

ネットワークの性能不足は[Network Adapter\Output Queue Length] というカウンターを確認します。このカウンターは送信方向についての Queue の値で通信相手の性能不足や通信経路の帯域不足などの可能性を検知することはできますが、自分が受信側の場合は検知できないので注意が必要です。

このように、CPUやストレージの性能不足はそれぞれのQueueを見ることが重要です。ただし、繰り返しになりますが一瞬Queueの値が大きくなったとしても心配する必要はありません。値が大きい状態が数十秒や数分継続する場合にはリソースの追加などを検討してください。