PerfView は Microsoft が提供する無料の高性能 ETW(Event Tracing for Windows)ベースのパフォーマンス分析ツールで、.NET アプリケーションの深刻なパフォーマンス問題を診断するために特に設計されています。
URL: https://github.com/microsoft/perfview/releases インストール: ダウンロード後、ZIPを展開するだけで実行可能
- 管理者権限で PerfView.exe を実行
- [Collect] → [Collect] をクリック
- 以下の設定を行う:
- Circular MB: 500
- Thread Time にチェック
- .NET SampleProfile にチェック
- Additional Providers: Microsoft-Windows-IIS
- [Start Collection] をクリック
- CPU使用率が高い状態を30秒~2分程度記録
- [Stop Collection] をクリック → ETLファイルが生成される
- 生成されたETLファイルをダブルクリック
- [CPU Stacks] をクリック
- フィルター設定:
- GroupPats: System;mscorlib;! (システムコードを除外)
- IncPats: w3wp (IISプロセスに限定)
- 表示されたスタックツリーでCPU使用の多いパスを分析
- [Thread Time Stacks] をクリック
- 対象のw3wpプロセスを選択
- スレッドの状態(RUNNING/BLOCKED)と待機理由を確認
- ブロッキングポイントを特定
- [GCStats] をクリック
- GCの頻度、時間、割合を確認
- Gen2コレクションが多い場合はメモリリークの可能性
- 無料で使用可能
- 軽量で強力な分析能力
- ETWベースで低オーバーヘッド
- コマンドラインからの自動化も可能
- メモリとCPUの両方の問題を分析可能
- 学習曲線が急(UIが直感的でない)
- 結果の解釈に専門知識が必要
- リモートサーバーでの使用には追加設定が必要
JetBrainsが提供する商用.NETプロファイリングツール。dotTraceはCPUプロファイリング、dotMemoryはメモリプロファイリング専用です。
URL: https://www.jetbrains.com/profiler/ ライセンス: 商用(30日間の無料評価版あり)
- dotTrace を起動
- [Profile Local Process] を選択
- リストから w3wp.exe を選択
- プロファイリングタイプを選択:
- Sampling: 低オーバーヘッドで概要把握(推奨)
- Tracing: 詳細な実行情報(より高負荷)
- [Run] をクリック
- CPU使用率が高い状態で [Get Snapshot] をクリック
- スナップショット取得後 [Stop] をクリック
- スナップショットが自動的に開かれる
- [Hot Spots] ビューでCPU使用率の高いメソッドを確認
- [Call Tree] で呼び出し階層を分析
- [Thread States] で各スレッドの状態を確認
- 右クリック→[Navigate to Source] でコードに直接ジャンプ可能
- dotMemory を起動
- [Local] → w3wp.exe プロセスを選択
- [Get Snapshot] をクリック
- 数分後に再度 [Get Snapshot] をクリック
- 2つのスナップショットを比較して、オブジェクト増加を確認
- [Retention Path] で大きなオブジェクトの参照元を追跡
- 直感的なUI、使いやすいインターフェース
- 詳細なフィルタリングと視覚化機能
- ソースコードへの直接ナビゲーション
- リモートプロファイリングが容易
- 専門知識が少なくても分析可能
- 有料のライセンスが必要
- プロファイリング中のオーバーヘッドがPerfViewより大きい
- 本番環境での使用は慎重に検討が必要
- 再現環境の準備
- PerfView または dotTrace で初期データ収集
- ホットスポットの特定
- スレッド状態と待機理由の分析
- アプリケーションコードの問題箇所特定
- 必要に応じてメモリ分析も実施
- 改善策の検討と実装
問題パターン | 検出方法 | ツールの活用ポイント |
---|---|---|
無限ループ | 同一メソッドが上位に表示 | PerfView: CPU Stacksで繰り返しパターン確認 dotTrace: Hot Spotsで集中箇所確認 |
非効率なDB処理 | DB関連メソッドの高CPU | PerfView: データアクセス部分のスタック分析 dotTrace: SQLクエリ時間の詳細表示 |
ロック競合 | スレッドの待機状態が多い | PerfView: Thread Time Stacksでロック待ち確認 dotTrace: Thread Statesでブロッキング分析 |
過剰なGC | GC関連スタックが多い | PerfView: GCStatsでGC頻度確認 dotMemory: メモリ消費と解放パターン分析 |
JSON/XML処理オーバーヘッド | シリアル化関連が上位 | 両ツール: シリアライザー関連のメソッド確認 |
スレッドプール枯渇 | ThreadPool関連スタックが多い | PerfView: ThreadTimeで待機スレッド分析 dotTrace: Thread Countでスレッド数推移確認 |
- 問題の現象と発生条件の整理
- ツールで検出した高CPU原因の特定
- スタックトレースやホットパスのスクリーンショット
- 問題コードと改善推奨事項
- 短期対応と長期対応の提案
判断基準 | PerfView | dotTrace/dotMemory |
---|---|---|
コスト | 無料 | 商用ライセンス必要 |
学習曲線 | 高い(複雑なUI) | 中程度(直感的UI) |
分析精度 | 非常に高い | 高い |
システム負荷 | 低い | 中~高 |
リモート分析 | 複雑な設定が必要 | 比較的容易 |
自動化 | コマンドラインで可能 | 限定的 |
レポート機能 | 基本的 | 高度でグラフィカル |