Azure VM (Windows) で完全メモリ ダンプを採取する方法

こんにちは。Azure サポートの宇田です。

今回は、Azure VM での完全メモリ ダンプの採取手順についてご紹介します。

ダンプ解析について


Azure VM として稼働している Windows OS がハングした際など、完全メモリ ダンプを採取して解析を行うことが、有効な調査手段となる場合があります。

一方で、Azure に限ったお話しではありませんが、ダンプから原因調査を行うためには、"現象が発生している際に" ダンプを採取する必要があるほか、解析には相当のコストを要する為、必ずしもダンプの解析を行う事が最善の策とは限りません。こうした点については、以下の投稿でも詳しくご説明しておりますので、まずはご一読いただく事を推奨いたします。

また、上記の投稿でもご案内しております通り、ご採取いただいたダンプの解析を Microsoft のサポート サービスで承る場合、原則としてプレミア サポート契約が必要となりますので、その点はご承知おきいただければと思います。IaaS として稼働する Azure VM 内の (Windows OS の) 設定や挙動に関してのお問い合わせは、Azure のサポート契約 (Developer / Standard / Professional Direct 等) では承ることが出来ず、Windows のサポート契約が必要となりますので、何卒ご了承ください。

完全メモリ ダンプを採取するための Windows OS の事前設定について


物理メモリ上のデータを完全メモリ ダンプとして出力させるためには、事前に以下の設定が必要となります。こちらの設定を行っていない既定の状態でも、自動メモリ ダンプなどの採取はいただけますが、完全メモリ ダンプとして採取されたい場合には、明示的に設定をお願いいたします。

なお、物理メモリを多く搭載した仮想マシンをご利用の場合、完全メモリ ダンプの採取に長時間を要すほか、出力先のディスクにも大きな空き容量が必要となります。このため、ご利用の環境やお客様側で必要とされるダンプの種類に合わせて、適宜設定をいただければと思います。

1. ページ ファイルの大きさを 物理メモリ + 400 MB 以上の大きさに設定する

- GUI から設定する場合
a) [ファイル名を指定して実行] から "sysdm.cpl" を起動し、[システムのプロパティ] を起動します。
b) [詳細設定] タブに移動し、[パフォーマンス] の [設定] ボタンをクリックします。
c) [詳細設定] タブに移動し、[仮想メモリ] の [変更] ボタンをクリックします。
d) [すべてのドライブのページング ファイルのサイズを自動的に管理する] を無効にします。
e) 任意のボリュームをクリックします。
f) [カスタム サイズ] を有効にし、[初期サイズ]、[最大サイズ] に物理メモリ + 400 MB 以上の数値を入力します。
g) [設定] ボタンをクリック後、[OK] をクリックします。

- レジストリから設定する場合
場所:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\MemoryManagement
名前:PagingFiles
種類:REG_MULTI_SZ
値:<ページ ファイル保存先> <初期サイズ (MB)> <最大サイズ (MB)> // 物理メモリ + 400 MB 以上の数値を入力します。
例: c:\pagefile.sys 4095 4095

2. 完全メモリ ダンプ (Full Dump) が生成される設定にする

- GUI から設定する場合
a) [ファイル名を指定して実行] から "sysdm.cpl" を起動し、[システムのプロパティ] を起動します。
b) [詳細設定] タブに移動し、[起動と回復] の [設定] ボタンをクリックします。
c) [システム エラー] 項目の [デバッグ情報の書き込み] で [完全メモリ ダンプ] を選択します。
d) また、メモリ ダンプ ファイルの保存先を変更する場合は [ダンプ ファイル] のパスを変更します。
e) 完了しましたら [OK] ボタンをクリックします。

- レジストリから設定する場合
下記キーを設定します。
場所:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl
名前:CrashDumpEnabled
種類:REG_DWORD
値:1

また、メモリ ダンプの出力先は以下のレジストリ値で確認できます。
場所:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl
名前:DumpFile
種類:REG_EXPAND_SZ
既定値:%SystemRoot%\MEMORY.DMP

3. NMI から STOP エラーを発生させるように設定する

- レジストリから設定が必要です
場所:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
名前:NMICrashDump
種類:REG_DWORD
値:1

4. 以上のレジストリの設定後、マシンを再起動します

ダンプの採取手順について


上記の設定後、OS ハングなどの事象が再現したタイミングで、Azure VM の Serial Console から NMI を発行して、ダンプを採取します。

なお、NMI の発行に伴い対象の Azure VM ではブルースクリーンが発生し、OS が強制再起動されることになりますので、未保存のデータ (物理メモリ上からディスクへ書き戻されていないデータ) が消失する点にご留意ください。

1. ブート診断を有効化する

対象の Azure VM でブート診断が無効な場合、事前に有効化を行います。

[状態] を [オン] へ変更し、任意のストレージ アカウントの選択と、[起動の診断] にチェックを入れて、[保存] を行います。

2. Serial Console から NMI を発行します

Serial Console の画面を開き、SAC> と表示されるまで待ってから、上部のボタンより [Send Non-Maskable Interrupt (NMI)] をクリックします。
これにより、対象の Azure VM に対して強制割り込み (NMI) が発行され、Windows OS であれば、ブルースクリーンの状態となります。

NMI が発行されると、以下のようなメッセージが表示され、物理メモリ上のデータがダンプ ファイルとして書き出されます。
末尾の表示が 100 % となった後、OS が再起動いたしますので、起動するまでしばらくお待ちください。

※ 物理メモリの大きな仮想マシンをご利用の場合、ディスクへの書き出しにお時間を要す場合があります。

[ブート診断] の機能より、スクリーンショットを確認することも可能ですので、ダンプの出力や OS 再起動に時間を要している場合は、こちらもご参照ください。

3. ダンプファイルを収集します

OS の起動後に RDP 接続を行うと、予期せぬ再起動が発生した事を示す画面が表示されます。

事前設定の手順 2. でレジストリに設定したフォルダ (既定では C:\Windows\MEMORY.dmp) に、ダンプ ファイルが出力されておりますので、こちらを適宜ダウンロードください。

以上、ご参考になりましたら幸いです。

 

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。