メモリ ダンプ ファイルを生成する方法について

こんにちは。Windows プラットフォーム サポートの世古です。

 

日々のサポート業務の中で、よくお問い合わせをいただくメモリ ダンプ ファイルについてご紹介いたします。

 

画面が固まって動かない等の問題(ブルースクリーンやフリーズ等)が発生した場合、マイクロソフトで調査を行う為にメモリ ダンプ ファイルの採取を依頼する場合があります。今回はそのファイルの詳細と採取方法についてご説明いたします。

 

  1. メモリ ダンプとは
  2. メモリ ダンプの種類
  3. メモリ ダンプの取得方法
  4. 完全メモリ ダンプの採取のための事前設定
  5. 手動でメモリ ダンプを生成する方法
  6. NMI を使用したメモリ ダンプ生成方法
  7. キーボードを使用したメモリ ダンプ生成方法

 

 

(1) メモリ ダンプとは

====================================

メモリ ダンプ ファイルは、システムのある瞬間の物理メモリの情報をファイルとして出力させたものです。OSが異常終了した際に、原因を調査する為にメモリ ダンプは役立ちます。システムの設定に依存しますが、異常終了(ブルースクリーン BSOD)が発生した際にメモリ ダンプ ファイルが作成されます。

 

具体的には以下の様な画面(ブルースクリーン BSOD)になった際にメモリ ダンプ ファイルが作成されます。

 

 

(2) メモリ ダンプの種類

====================================

メモリ ダンプには以下 3 つの種類がございます。

 

  • 最小メモリ ダンプ (256 KB): 停止した理由を判別するのに役立つ有用な情報の最小セット(Stop メッセージとそのパラメーター、停止したスレッドのカーネル モードの呼び出し履歴等)を記録します。原因追及に至る可能性は非常に低いです。
  • カーネル メモリ ダンプ: カーネル メモリだけを記録します。ユーザー モードの情報がないため、トラブルの原因を特定できない場合があります。
  • 完全メモリ ダンプ: システム メモリのすべての内容を記録します。詳細調査に非常に有効です。

 

完全メモリ ダンプではすべての物理メモリの内容を出力でき、より詳細な調査に有効な情報を確認する事が出来ます。調査の為にメモリ ダンプを取得する場合には、完全メモリ ダンプを取得いただく事を推奨しております。

 

各ダンプで取得される情報についての詳細は以下の情報をご参照ください。

 

-          参考:

メモリ ダンプ ファイル オプションの概要

https://support.microsoft.com/kb/254649/ja

 

 

(3) メモリ ダンプの取得方法

====================================

実際にシステムがクラッシュした際にメモリ ダンプを生成するには、事前にシステムの設定をする必要がございます。具体的には以下 2 つの設定を行います。

 

  • PageFile の大きさを設定する。
  • メモリ ダンプが生成される設定にする。

 

上記 2 つの具体的な手順として完全メモリ ダンプの設定手順を以下にご案内いたします。

 

 

(4) 完全メモリ ダンプの採取のための事前設定

====================================

以下 2つの設定を行い、メモリ ダンプが正しく出力されるように設定します。

 

1. PageFile の大きさを設定する

PageFile の初期サイズと最大サイズを、物理メモリのサイズ + 300 MByte以上に設定します。

 

※ 300 MByte はダンプ ファイルのヘッダー情報や二次ダンプ ファイルのために使われる領域です。現在サポートしているどの OS のどの環境にでも対応できるように余裕を持たせた値となっております。弊社の KB やエンジニアがお送りしているメールによっては、より少ない値 (1MB など) でご案内している場合もございます

 

場所:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\Memory Management

名前:PagingFiles

種類:REG_MULTI_SZ

値:<ページ ファイル保存先> <初期サイズ (MB)> <最大サイズ (MB)>

 

例:)物理メモリのサイズが 4 GB (4096 MB) の場合

 “c:\pagefile.sys 4396 4396”

 

※ 初期サイズを物理メモリ サイズより小さくした場合、システムに深刻なクラッシュが発生して PageFile のファイル サイズを必要な大きさまで拡張する機能が動作しなくなった際に、正常に完全メモリ ダンプが生成されなくなる可能性があります。必ず、初期サイズも最大サイズと同様に物理メモリ サイズより大きくしてください

※ 複数のドライブにページ ファイルを保存する場合は、 “c:\pagefile.sys 4396 4396 d:\pagefile.sys 1024 1024” のように、先頭のドライブのページ ファイルに必要なサイズを確保するようにします

 

2. メモリ ダンプが生成される設定にする

レジストリ エディタで、下記のレジストリの値を設定します。

 

場所: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl

名前: CrashDumpEnabled

種類: REG_DWORD

値: 1

 

値の説明:

0x0 = メモリ ダンプなし

0x1 = 完全メモリ ダンプ

0x2 = カーネル メモリ ダンプ

0x3 = 最小メモリ ダンプ

 

メモリ ダンプの出力先は以下のレジストリ値で確認できます。

 

場所: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl

名前: DumpFile

種類: REG_EXPAND_SZ

既定値: %SystemRoot%\MEMORY.DMP

 

上記レジストリの設定を変更した後は、設定値を反映する為にシステムの再起動が必要となります。

 

 

(5) 手動でメモリ ダンプを生成する方法

====================================

上述のダンプの設定を行った後、次回以降ブルー スクリーン エラーが発生するとメモリ ダンプが保存されます。実際にメモリ ダンプが生成されるか確認する場合には、後述にてお伝えいたします、手動でメモリ ダンプを生成する方法をご検討下さい。この方法はメモリ ダンプを強制的に取得したい場合(フリーズやハングアップ等)にも利用できます。なお、手動でダンプを生成する際にも、ブルー スクリーンの状態になりますので、サーバーの電源を強制的に OFF/ON した際と同様の影響があることを予めご了承ください。

 

手動でメモリ ダンプを生成するには、以下の 2 つの方法がございます。

 

  • NMI を使用したメモリ ダンプ生成方法
  • キーボードを使用したメモリ ダンプ生成方法

 

尚、NMI スイッチを使用する事により、キーボード等で操作できない状況でもメモリダンプを採取できる可能性があります。NMI はキーボード操作より高い優先順位で割り込みを発生させますので、キーボード操作ができない場合も、ダンプが取得できる可能性があります。その為、可能な限り NMI でのメモリ ダンプ取得をご検討下さい。

 

※ ブルー スクリーンの “Dumping physical memory to disk” の値が 100 になったタイミング(後述の画面ピクチャ参照)で電源  OFF/ON による再起動を実施してください 。尚、自動再起動が設定されている場合は 100 になったタイミングで自動で再起動されます。  

また、仮想環境で手動でダンプを生成する場合、それぞれの環境に応じた方法をとる必要がありますので、ご注意ください。

(Hyper-V 環境をご利用の場合)

Hyper-V 環境におけるゲスト OS のクラッシュダンプ採取手順について

 

 

-          自動再起動の設定値について

自動再起動の設定は以下のレジストリ値よりご確認いただけます。

 

レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\AutoReboot

値:

0 = 自動再起動無効

1 = 自動再起動有効

 

ブルー スクリーンが表示されている際には、物理メモリの情報をファイルとして出力しております。その出力状況が “Dumping physical memory to disk” の値です。その為、この値が 100 に達する前に再起動を実施した場合には正しくファイルが出力されない状況となりますので、必ず 100 になったことを確認してから再起動を実施ください。このファイル出力にかかる時間は、ディスクへの書き込み速度および物理メモリのサイズに応じて変化します。

 

  

(6) NMI を使用したメモリ ダンプ生成方法

====================================

NMI を有効にする為、まずはソフトウェア側のダンプ設定を行います。

 

1.      [スタート] から [コンピューター] を右クリックし [プロパティ] をクリックします。

2.      [システム] 画面から右下の [設定の変更] をクリックします。

3.      [システムのプロパティ] 画面の [詳細設定] タブより、[起動と回復] 欄にある [設定] ボタンをクリックします。

4.      [起動と回復] 画面より、デバッグ情報の書き込みを [完全メモリ ダンプ] に設定します。

5.      [OK] をクリックし画面を閉じます。

6.      次に [レジストリ エディター] を開き、以下のレジストリ サブ キー を選択します。

          HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

7.      [CrashControl] キーを右クリックし、[新規] から [DWORD 値] をクリックします。

8.      追加された DWORD 値の名前に ”NMICrashDump” と入力し、ENTER キーを押します。

9.      NMICrashDumpを右クリックし、[修正] をクリックします。

10.     [値のデータ] の空欄に ”1” を入力し [OK] ボタンをクリックします。

11.     再起動を実施し、レジストリの変更を反映します。

12.     NMI スイッチを使用してダンプ ファイルが生成されるか確認します。

 

ダンプの取得する為の NMI スイッチはそれぞれのサーバーによって場所が異なります。NMI の発行方法につきましてはハードウェア ベンダーのご提供元様にお問い合わせください。

 

尚、Windows Server 2012、Windows 8 の環境においては NMI の設定が既定で構成されておりますので、上記レジストリの追加および変更は必要ありません。

 

-          参考:

Windows ベースのシステムに、NMI を使用して完全クラッシュ ダンプ ファイルまたはカーネル クラッシュ ダンプ ファイルを生成する方法

https://support.microsoft.com/kb/927069/ja

 

NMI_HARDWARE_FAILURE error when an NMI is triggered on Windows 8 and Windows Server 2012

https://support.microsoft.com/kb/2750146

 

 

(7) キーボードを使用したメモリ ダンプ生成方法

====================================

キーボードからの割り込み処理を有効にする為、レジストリの設定を行います。

 

[PS/2 キーボードの場合]

レジストリ エディタで、下記のレジストリの値を設定してください。

 

場所:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters

名前:CrashOnCtrlScroll

種類:REG_DWORD

値:1

 

[USB キーボードの場合]

レジストリ エディタで、下記のレジストリの値を設定してください。

 

場所:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters

名前:CrashOnCtrlScroll

種類:REG_DWORD

値:1

 

レジストリ値の変更後はシステムを再起動します。

 

-          キーボードの種類を確認する方法について

上記キーボードの種別は、対象のコンピューター上にて msinfo32.exe を実行いただくことでご確認いただけます。

 

  1. [スタート] - [ファイル名を指定して実行] から、msinfo32.exe を実行します。
  2. システム情報で、[コンポーネント] - [入力] - [キーボード] を展開します。
  3. 詳細画面の "説明" 項目の値をご確認いただければと存じます。
  • 標準 PS/2 キーボード
  • USB 入力デバイス

  上記値などをご確認ください。

 

※ 判別が難しい場合は、両方のレジストリの値を設定いただいても問題ございません。

 

-          強制ダンプの採取手順

強制ダンプの採取手順は以下の通りです。

 

  1. 右の CTRL キーを押しながら ScrollLock キーを 2 回押下します。
  2. 再起動し、青い画面となります。カウンタが開始されますので、そのまま OS が起動するまでお待ち下さい。
  3. [デバッグ情報の書き込み] ボックスの「ダンプ ファイル」に記載されているパスにダンプ ファイルが作成されます。

 

-          参考

キーボード操作でメモリ ダンプ ファイルを作成できる Windows の機能

https://support.microsoft.com/kb/244139/ja

 

Windows Server 2008 および Windows Server 2008 R2 でカーネルまたは完全メモリ ダンプ ファイルを生成する方法

https://support.microsoft.com/kb/969028/ja

 

 

ダンプの調査をご検討される方にとって上述の内容がご参考になりますと幸いです。