Windows Server のボトルネック検出に役立つパフォーマンスカウンタ

Windows Server で性能問題が発生したときなど、ボトルネックを探すのに参考にするとよいパフォーマンスカウンタの一覧と、判断の目安です。

CPU

カウンター説明
\Processor(*)\% Processor Timeプロセッサがアイドル状態でないスレッドを実行した時間の割合。

Processor(_Total) は全ての Processor の平均値なので、どれか1個の Processor が 100% になっていた場合には気づきにくいです。よって、それぞれの Processor 単位で見る必要があります。

Total が 85% を超えている場合は、サーバー全体として CPU のスペックが足りていない可能性があります。
個別の Processor の使用率が高い場合は、アプリケーション側の問題である可能性が高いです。その場合は、Processor を分散して使用可能にするなどのアプリ側の対応が必要となります。
\Processor(_Total)\Interrupt Timeプロセッサがハードウェア割り込みを受け取って、処理をした時間の割合。

15% を超えた場合は、ハードウェアに関する問題が発生している可能性があります。
\System\Processor Queue Lengthプロセッサ キューに格納されているスレッドの数。(プロセッサで実行中のスレッドは含まない)

長時間、物理 CPU コア数の2倍を超える場合は、サーバーの CPU のスペックが足りていない可能性があります。

ディスク

カウンター説明
\LogicalDisk(*)\% Free Space論理ディスク ドライブの空き容量の割合。

システム ドライブが 15% より低くなる場合、OS としては空き容量不足の可能性があります。
\PhysicalDisk(*)\% Idle Timeサンプリング間隔中に、ディスクがアイドル状態であった割合。

20% よりも低い場合、ディスク の使用率(容量ではなく アクセス)が高いと判断できます。
\PhysicalDisk(*)\Avg. Disk sec/Readディスクからのリード処理中の転送時間の平均。

25 msec を超える場合は、ディスクからの読み込みに待ち時間が発生します。
\PhysicalDisk(*)\Avg. Disk sec/Writeディスクへのライト処理中の転送時間の平均。

25 msec を超える場合は、ディスクへの書き込みに待ち時間が発生します。
\PhysicalDisk(*)\Avg. Disk Queue Lengthサンプリング間隔中に、ディスクのキューにある要求数の平均。

ディスクのスピンドル数+2を超える場合は、ディスクがボトルネックである可能性が高いです。

※ スピンドル数とは、RAIDのデータディスク数
HDD 4個でRAID 5の場合、スピンドル数は 3
HDD 2個でRAID 0の場合、スピンドル数は 2
\LogicalDisk(*)\Disk Transfers/secディスクに対するリード・ライト処理の実行速度。
(補足的な参考値)
\PhysicalDisk(*)\Disk Bytes/secディスクのリード・ライト速度 (バイト数)。
(補足的な参考値)
\PhysicalDisk(*)\Disk Read Bytes/secディスクのリード速度 (バイト数)。
(補足的な参考値)
\PhysicalDisk(*)\Disk Reads/secディスクのリード速度 (I/O 数)。
(補足的な参考値)
\PhysicalDisk(*)\Disk Write Bytes/secディスクのライト速度 (バイト数)。
(補足的な参考値)
\PhysicalDisk(*)\Disk Writes/secディスクのライト速度 (I/O 数)。
(補足的な参考値)

メモリ

メモリの場合は、ボトルネックではなくメモリリークの有無の検出となります。

カウンター説明
\Memory\% Committed Bytes In UseCommit Limit に対する Committed Bytes の割合。すなわち、使用されている仮想メモリの割合。

80% を超える場合は、メモリが不足している状態です。
\Memory\Available MBytes実行中のプロセスに使用できる、物理メモリのサイズ。

継続的に低下している場合、メモリリークが発生している可能性があります。
\Memory\Pool Nonpaged BytesNon-Paged Pool Memoryのサイズ。

継続的に増加している場合、カーネルが使用するメモリが圧迫される可能性があります。
\Memory\Pool Paged BytesPaged Pool Memoryのサイズ。

継続的に増加している場合、カーネルが使用するメモリが圧迫される可能性があります。
\Memory\Committed Bytes使用されているメモリの使用量。
(補足的な参考値)
\Memory\Page Faults/sec1秒間あたりに発生した、ページフォルトの数。
(補足的な参考値)

ネットワーク

カウンター説明
\Network Interface(*)\Bytes Total/sec1秒間あたりに各ネットワーク アダプター経由で送受信されたバイト数 。

NIC インターフェースの 70% 程度 (1Gbbs の場合、85MB/sec 程度) を超えている場合、ネットワーク帯域が飽和している可能性があります。
\Network Interface(*)\Output Queue Length送信パケットが格納されるキューの長さ。

2を超える場合、ネットワーク帯域が飽和している可能性があります。
\Network Interface(*)\Packets Received/sec1秒間あたりに各ネットワーク アダプター経由で受信されたパケットの数。
(補足的な参考値)
\Network Interface(*)\Packets Sent/sec1秒間あたりに各ネットワーク アダプター経由で送信されたパケットの数。
(補足的な参考値)
\Network Interface(*)\Packets/sec1秒間あたりに各ネットワーク アダプター経由で送受信されたパケット数 。
(補足的な参考値)

プロセス

カウンター説明
\Process(プロセス名)\Handle Countプロセスによって現在開かれているハンドル数の合計。

10,000を超えている場合、ハンドルリークが発生している可能性があります。
\Process(プロセス名)\Private Bytesプロセスに割り当てられており、他のプロセスと共有できない領域のメモリサイズ。

増加傾向の場合は、メモリリークが発生している可能性があります。