Skip to content

MS_PerformanceCounters

nishi_74322014 edited this page Aug 3, 2026 · 1 revision

パフォーマンス カウンタ

概要

  • パフォーマンス カウンタは、システムの状態や動作を計測する手段。
  • パフォーマンス カウンタは、
    • オペレーティング システムに含まれていることも、
    • 個別のアプリケーションの一部であることもある。
      アプリケーションのインストール時にパフォーマンス カウンタもインストールされる。

Windows

Windows のパフォーマンス カウンタ

CPUリソース

一先ず、以下の辺りを使用。

  • % Processor Time
  • Processor Queue Length

移行メモ(誤記): 原文の ProcesserProcessor の綴り誤り。

Processor Queue Lengthシステム全体で1つのカウンタ
System オブジェクト配下)。目安は「論理プロセッサ数 × 2」を継続的に超えたら CPU 不足。

メモリ・リーク

メモリ・リーク

メモリ空き容量

未使用ページリスト、ゼロページリスト、スタンバイ リストの合計

カウンタ 意味
Memory\Available Bytes / KBytes / MBytes 空きメモリのサイズ
Memory\Pool Paged Bytes ページ プールのサイズ
Memory\Pool Nonpaged Bytes 非ページ プールのサイズ
Memory\Committed Bytes コミットされた仮想メモリのサイズ

移行メモ(誤記): 原文の Memory\Commited BytesCommitted Bytes(t が2つ)。

メモリ使用量@プロセス毎

カウンタ 意味
Process(*)\Private Bytes コミットされた仮想メモリのサイズ(他のプロセスと共有できない)
Process(*)\Virtual Bytes コミットと予約の双方を含む仮想メモリのサイズ
Process(*)\Working Set 使用物理メモリのサイズ(他のプロセスと共有している部分も含む)
Process(*)\Pool Paged Bytes ページ プールのサイズ
Process(*)\Pool Nonpaged Bytes 非ページ プールのサイズ

リーク判定に使うのは Private Bytes
Working Set は OS の都合で増減するため判定には向かない
物理メモリ管理を参照)。

マネージド・メモリ@プロセス毎

カウンタ 意味
.NET CLR Memory\# Bytes in all Heaps GCヒープに割り当てられた仮想メモリのサイズ(Gen0/1/2 + LOH の合計)
.NET CLR Memory\Gen 0/1/2 heap size 各世代に割り当てられる仮想メモリ サイズ
.NET CLR Memory\Large Object Heap size LOH に割り当てられる仮想メモリ サイズ
.NET CLR Memory\# Total committed Bytes GC によって現在コミットされている仮想メモリのサイズ
.NET CLR Memory\# Total reserved Bytes GC によって現在予約されている仮想メモリのサイズ

移行メモ(正誤): 原文は最後の2行の説明が入れ替わっていた (committed に「予約されている」、reserved に「コミットされている」)。 カウンタ名のとおりに修正した。

※ 切り分けの定石は、Private Bytes は増えるが # Bytes in all Heaps は増えない
→ アンマネージド側のリーク(Marshal、COM、ネイティブ DLL)を疑う。

ハンドル/リソース リーク

カウンタ 意味
Process(_Total)\Handle Count プロセス全体のオープンされているハンドル数
Process(_Total)\Thread Count プロセス全体のスレッド数
Process(*)\Handle Count / Thread Count 対象プロセスごとの値
Objects\Events / Mutexes / Processes / Sections / Semaphores / Threads 各種オブジェクト数

ハンドルリークはカーネルモードメモリの圧迫につながる。

マネージド・リソース・リーク@プロセス毎

  • .NET CLR LocksAndThreads\# of current logical Threads

Heap(パフォーマンス オブジェクト)

カウンタ 意味
Heap\Committed Bytes ヒープマネージャによるコミットサイズ
Heap\Allocs - Frees ヒープの割り当て・解放数の差

※ 既定では無効。有効化には設定が必要(オーバーヘッドがあるため調査後は戻す)。

ページングの分析

移行メモ(誤記): 原文の Memory\Page Read/secMemory\Pages Read/sec(Pages と複数形)。 なお Page Faults/sec はソフト フォールトを含むため、 ハード フォールトを見たい場合は Pages Read/sec を使う。

I/O

ディスク

一先ず、以下の辺りを使用。

  • % Disk Time
  • Current Disk Queue Length

% Disk Time は複数ディスク/キューイングのある環境で 100% を超える値を示すことがあり、
判断材料としては Avg. Disk sec/ReadAvg. Disk sec/Write(応答時間) のほうが確実。

ネットワーク

  • Network Interface(*)\Bytes Total/sec
  • Network Interface(*)\Output Queue Length

IIS

IIS のパフォーマンス カウンタ
(IISのパフォーマンス カウンタ: MS_IISPerformanceCounters.md

SQL Server

SQL Server のパフォーマンス カウンタ
(SQL Server 問題の分析方法: MS_SQLServerProblemAnalysis.md

採取の方法

方法 用途
パフォーマンス モニタ(perfmon.msc GUI でのリアルタイム表示、データ コレクター セットの作成
typeperf コマンドラインで採取(CSV 出力)
logman 採取のスケジュール制御
relog 採取済みログの再編集(間引き・形式変換)
PowerShell Get-Counter スクリプトからの採取

※ 障害調査では発生前から継続採取しておくことが決定的に重要。
発生後に採取を始めても比較対象(正常時のベースライン)がない。

参考


Tags: インフラストラクチャ, Windows, 障害対応, 性能, デバッグ, ツール類

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally