「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
以下は障害発生までに至る因果関係の事例になります。
- 「現象」と「原因」はプラットフォームの内部状態を理解しなければ紐付けできません。
- 逆に言えばプラットフォームの内部動作を理解しておけば、この紐付けも容易になります。
これを行うには
- プラットフォームに対する知識
- 状態確認・分析方法に関する知識
- 分析結果から原因を推測するスキル
が必要になります。
xxx例外の発生 †
現象 †
- 例外でクラッシュ
- xxx例外
分析手順 †
- ログ確認
WERなどから例外情報を確認する。
- ダンプ+ダンプ解析
- 本番環境でのみ再現する場合はクラッシュダンプ取得+解析
- 例外情報と、例外を発生させているスレッドのスタックを確認する。
- プログラムのプロファイル
開発環境で再現できる場合、プログラムをデバッグ
原因 †
プログラムのバグによる未処理例外
解決策 †
OutOfMemory?例外の発生 †
現象 †
- 性能が出ない → 例外でクラッシュ
- メモリ使用量大 → GC、ページング → オーバヘッド大 → OutOfMemory?例外
分析手順 †
- ログ確認
WERなどから例外情報を確認する。
- パフォーマンスカウンタ
ページング、メモリリークの確認、プロセスの特定など
- ダンプ+ダンプ解析
- 本番環境でのみ再現する場合はダンプ取得+解析
- 仮想アドレス空間の確保状況を確認する。
- プログラムのプロファイル
- 開発環境で再現できる場合、プロファイルを実行
- ヒープの使用状況を確認する。
原因 †
プログラムのバグによるメモリリーク
解決策 †
CPU使用率大 †
現象 †
- 性能が出ない
- CPU使用率大
分析手順 †
- パフォーマンスカウンタ
CPUリソースを消費しているプロセスの特定など
- ダンプ+ダンプ解析
本番環境でのみ再現する場合はハングダンプ取得+解析
(ハングダンプを取得可能なほどCPUを消費する場合に限り)
ハングしていると思われるスレッドのスタックを確認する。
- プログラムのプロファイル
開発環境で再現できる場合、プロファイラを実行して問題個所を特定
原因 †
プログラムのバグ・問題によるCPUリソース大量消費(種々の効率の悪い処理に起因する)
解決策 †
ディスクIOネック †
現象 †
- 性能が出ない
- ディスクIOネック
分析手順 †
- パフォーマンスカウンタ
ディスク・リソースを消費しているプロセスの特定など
- プログラムのプロファイル
開発環境で再現できる場合、プロファイラを実行して問題個所を特定
原因 †
プログラムの問題によるディスク・リソース大量消費
解決策 †
SQLの完了が遅い †
現象 †
- 性能が出ない
- SQLの完了が遅い
分析手順 †
- パフォーマンスカウンタ
- ハードウェア・リソース消費の確認
- SQL Serverの状態の確認
- SQLログ
SQL Serverのイベントの確認
- SQLトレース
DBMSインスタンスの処理しているクエリの確認
- 実行プランの確認
問題のSQLの実行プラインに問題が無いか確認
原因 †
プログラムの問題によるディスク・リソース大量消費
解決策 †
- DBサーバのリソース不足
- DB設定の問題によるリソース大量消費
- バッファ・キャッシュの拡張、
- DB拡張、ログ記録、制約、トリガ等の一時的無効化
- DMLの問題によるリソース大量消費
- 非効率なデータアクセスを修正する。
- リソースを大量消費しないように修正する。
- インデックスを使用するように記述(ルールベース
- インデックスを使用するように統計情報を更新(コストベース
- DDLの問題によるリソース大量消費
Tags: :障害対応, :デバッグ