-
Notifications
You must be signed in to change notification settings - Fork 0
MS_KernelDump
-
TOP > トラブルシュート > ダンプの概要(種類と取得)
- ユーザモード・プロセス・ダンプ
- カーネル・ダンプ
- STOPエラー
- ミニダンプと呼ばれる数十KBの小さいダンプ
- 例外の発生したコードやスタックの情報が書き込まれるが、メモリの情報は出力されない。
- また、以下のダンプ(カーネル メモリ ダンプ、完全メモリ ダンプ)でもミニダンプは取得される。
※ 出力先は %SystemRoot%\Minidump\(複数世代が残る)。
- カーネルモードのメモリ情報
- ブルースクリーン(STOPエラー)時は、カーネルの問題を見る場合が多いので、
殆どの場合は、カーネル メモリ ダンプで事足りる。 - 一般的に数十〜数百MB程度の容量になる。
- 完全なメモリ情報
- 完全メモリダンプ以外では、ユーザ・プロセス情報が取得できない。
- 以下の条件を満たしていることが取得のための条件になる。
- ダンプ出力先のドライブに搭載メモリ以上の空き容量
- ページング ファイルが十分な大きさであること(システム管理サイズが無難)
※ 出力先は既定で %SystemRoot%\MEMORY.DMP(上書き)。
補足(最新化): Windows 8 以降には 自動メモリ ダンプ(Automatic memory dump)が追加され、既定値になっている。 中身はカーネル メモリ ダンプと同じだが、 OS がページング ファイルのサイズを自動管理する点が異なる。 Windows 10 以降では アクティブ メモリ ダンプ(Active memory dump)もあり、 完全メモリ ダンプから仮想マシンのゲスト メモリ等を除いてサイズを抑えられる (Hyper-V ホストの調査に有用)。
- 物理メモリの情報が一度、ページングファイルに移動される。
- 再起動時、
savedump.exeによって、memory.dmpファイルを作成する。
※ このため、ページング ファイルがシステム ドライブに無い/小さすぎると
ダンプが出力されない。よくある「ダンプが取れない」原因のひとつ。
- 物理メモリ上にない仮想アドレスの情報は記録されない事。
- スワップ ≒ ハードページフォールトが発生しているような環境では
ユーザモードメモリやカーネルモードメモリ(ページプール)の
ダンプが上手く取れない可能性がある。
STOPエラーが起きれば、カーネル・ダンプが取得される。
STOPエラーを意図的に起こすことでカーネル・ダンプを取得可能。
- キーボード操作
「右」Ctrl キーを押しながら ScrollLock キーを2回押すことにより、メモリ ダンプ ファイルを作成
※ レジストリ設定(CrashOnCtrlScroll)が必要、未ログイン状態でも可 - NMIスイッチ
OSを強制的にクラッシュさせるボタン - StartBlueScreen
非常に小さなデバイス・ドライバをロードし、
コマンドライン中で指定するパラメータでカーネルのKeBugCheckExAPI を呼ぶ。
StartBlueScreen.exe 0x10 0x1111 0x2222 0x3333 0x4444
※ OSフリーズの調査でダンプを取りたい場合は、この「意図的に落とす」手段が要る
(フリーズしているだけでは STOP エラーにならず、ダンプが出ないため)。
以下は、メモリ ダンプ ファイルを参照する方法である。
基本の流れは、シンボル パスを設定して !analyze -v を実行する。
.symfix
.reload
!analyze -v
Dumpchk.exe は WinDbg に比べると初歩的な分析しかできない。
- メモリ ダンプ ファイルが正常に作成されたかどうかの検証に使用できるコマンド ライン ユーティリティ
- メモリ ダンプ ファイル内でエラーが検出された場合は、Dumpchk により報告される。
ミニ・ダンプの一覧ツール、WinDbg に比べると簡単な情報しか取得できない。
Tags: インフラストラクチャ, Windows, 障害対応, デバッグ
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。