-
Notifications
You must be signed in to change notification settings - Fork 0
MS_IISPerformanceCounters
- 戻る(IISのログ、パフォーマンス カウンタ)
- IISのパフォーマンス カウンタ
- IIS
移行メモ(元ページは見出しのみ): 元ページは「概要」「詳細」「参考」の
見出しだけで本文が空(606 バイト)だったため、
IISや性能問題のポイントの
記述と整合する形で基本事項を補って記述した。
IISの性能問題を切り分ける際に、
Windows のパフォーマンス モニター(perfmon)で確認できる
主要なカウンタを整理する。
IISの性能問題は、どこで待っているかを特定するのが第一歩である。
[クライアント] → [IIS(W3SVC)] → [w3wp.exe(アプリ プール)]
→ [ASP.NET] → [DB / 外部 API]
| 層 | 主なカウンタ オブジェクト |
|---|---|
| Web サーバー全体 | Web Service |
| ワーカー プロセス |
Process(w3wp)、W3SVC_W3WP
|
| ASP.NET |
ASP.NET、ASP.NET Applications
|
| .NET ランタイム |
.NET CLR Memory、.NET CLR Exceptions、.NET CLR LocksAndThreads
|
| OS |
Processor、Memory、PhysicalDisk、Network Interface
|
| カウンタ | 見方 |
|---|---|
Current Connections |
現在の接続数。急増していないか |
Total Method Requests/sec |
スループット |
Bytes Sent/sec / Bytes Received/sec
|
帯域が飽和していないか |
| カウンタ | 見方 |
|---|---|
Requests Queued |
キューに溜まっている数。0 でないなら詰まっている |
Requests Current |
処理中 + キューの合計 |
Request Wait Time |
キューでの待ち時間(ミリ秒) |
Request Execution Time |
処理時間 |
Requests Rejected |
溢れて 503 を返した数。出ていたら明確に異常 |
| カウンタ | 見方 |
|---|---|
Requests/Sec |
アプリ単位のスループット |
Errors Total/sec |
エラー発生率 |
Sessions Active |
セッション数(ASP.NET Session) |
Cache API Hit Ratio |
キャッシュ効率 |
| カウンタ | 見方 |
|---|---|
% Time in GC |
10% を超え続けるならメモリ問題(メモリ リーク) |
# Gen 2 Collections |
Gen2 GC の回数。多いとリークの疑い |
# of Exceps Thrown / sec |
例外の多発は性能を大きく落とす |
Contention Rate / sec |
ロック競合 |
| カウンタ | 見方 |
|---|---|
% Processor Time |
CPU |
Private Bytes |
右肩上がりならメモリ リーク |
Thread Count |
スレッド数。急増はスレッド枯渇の兆候 |
Handle Count |
ハンドル リーク |
補足(典型的な読み取り方): 組み合わせで原因を絞る。
症状 見るべき組み合わせ 疑い 遅いが CPU は低い Requests Queued高 +% Processor Time低外部待ち(DB / API)、スレッド枯渇 遅くて CPU が高い % Processor Time高 +% Time in GC高GC 過多(メモリ問題) 徐々に遅くなる Private Bytes右肩上がりメモリ リーク 503 が出る Requests Rejected> 0キュー上限超過。スケール不足 初回だけ遅い - 初回が遅い!(JIT / コンパイル) 特に 1 行目は多く、同期的に外部 I/O を待っていることが原因のことが多い。
非同期処理のasync/await化で改善する。
:: データ コレクタ セットを作る
logman create counter IISPerf -f bincirc -v mmddhhmm -max 250 ^
-c "\Processor(_Total)\% Processor Time" ^
"\ASP.NET\Requests Queued" ^
"\Process(w3wp)\Private Bytes" ^
-si 00:00:15 -o C:\PerfLogs\IISPerf
logman start IISPerf
logman stop IISPerf
補足(本番では常時採取しておく): 性能問題は
発生後に再現させるのが難しい。
15〜60 秒間隔・循環ファイルで常時採取しておくと、
事後の切り分けが格段に楽になる。負荷もごく小さい。
補足(現在の選択肢):
perfmonは今も有効だが、
クラウド / コンテナでは別の手段が使われる。
環境 手段 オンプレ Windows perfmon / logman Azure Application Insights(分散トレース + 依存関係の可視化) .NET Core 以降 dotnet-counters(クロスプラットフォーム)コンテナ Prometheus + OpenTelemetry
dotnet-countersはperfmon相当の情報を
Linux コンテナでも取得できるため、
ASP.NET Coreでは第一選択になる。
-
ASP.NET のパフォーマンス カウンター
https://learn.microsoft.com/previous-versions/dotnet/netframework-4.0/fxk122b4(v=vs.100) -
dotnet-counters
https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-counters
Tags: 移行, インフラストラクチャ, Windows, IIS, 障害対応, 性能, デバッグ
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。