-
Notifications
You must be signed in to change notification settings - Fork 0
MS_PerformanceCounters
- パフォーマンス カウンタは、システムの状態や動作を計測する手段。
- パフォーマンス カウンタは、
- オペレーティング システムに含まれていることも、
- 個別のアプリケーションの一部であることもある。
アプリケーションのインストール時にパフォーマンス カウンタもインストールされる。
Windows のパフォーマンス カウンタ
一先ず、以下の辺りを使用。
% Processor TimeProcessor Queue Length
移行メモ(誤記): 原文の
ProcesserはProcessorの綴り誤り。
※ 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 BytesはCommitted 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\Committed Bytes |
ヒープマネージャによるコミットサイズ |
Heap\Allocs - Frees |
ヒープの割り当て・解放数の差 |
※ 既定では無効。有効化には設定が必要(オーバーヘッドがあるため調査後は戻す)。
- ページングの分析は
Memory\Pages Read/secを参照する。 - 実行モジュール読込みやデータファイルの I/O でも、
ページファイルを使用している場合は、この値が増加する。 - この問題は、データがファイル・システム・キャッシュに乗ると改善される。
- なお、ページ フォールトは、ハード ページ フォールトとソフト ページ フォールトを区別する。
移行メモ(誤記): 原文の
Memory\Page Read/secはMemory\Pages Read/sec(Pages と複数形)。 なおPage Faults/secはソフト フォールトを含むため、 ハード フォールトを見たい場合はPages Read/secを使う。
一先ず、以下の辺りを使用。
% Disk TimeCurrent Disk Queue Length
※ % Disk Time は複数ディスク/キューイングのある環境で 100% を超える値を示すことがあり、
判断材料としては Avg. Disk sec/Read・Avg. Disk sec/Write(応答時間) のほうが確実。
Network Interface(*)\Bytes Total/secNetwork Interface(*)\Output Queue Length
IIS のパフォーマンス カウンタ
(IISのパフォーマンス カウンタ: MS_IISPerformanceCounters.md)
SQL Server のパフォーマンス カウンタ
(SQL Server 問題の分析方法: MS_SQLServerProblemAnalysis.md)
| 方法 | 用途 |
|---|---|
パフォーマンス モニタ(perfmon.msc) |
GUI でのリアルタイム表示、データ コレクター セットの作成 |
typeperf |
コマンドラインで採取(CSV 出力) |
logman |
採取のスケジュール制御 |
relog |
採取済みログの再編集(間引き・形式変換) |
PowerShell Get-Counter
|
スクリプトからの採取 |
※ 障害調査では発生前から継続採取しておくことが決定的に重要。
発生後に採取を始めても比較対象(正常時のベースライン)がない。
- Windows パフォーマンス モニター - Microsoft Learn
- パフォーマンス・モニタの使い方(基本編)- @IT
- typeperfコマンドでシステムのパフォーマンス・カウンタのデータを収集する - @IT
- パフォーマンス・カウンタのデータ収集をlogmanコマンドで制御する - @IT
Tags: インフラストラクチャ, Windows, 障害対応, 性能, デバッグ, ツール類
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。