Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
こんにちは。Azure サポートの宇田です。
今回は、Azure VM での完全メモリ ダンプの採取手順についてご紹介します。
ダンプ解析について
Azure VM として稼働している Windows OS がハングした際など、完全メモリ ダンプを採取して解析を行うことが、有効な調査手段となる場合があります。
一方で、Azure に限ったお話しではありませんが、ダンプから原因調査を行うためには、"現象が発生している際に" ダンプを採取する必要があるほか、解析には相当のコストを要する為、必ずしもダンプの解析を行う事が最善の策とは限りません。こうした点については、以下の投稿でも詳しくご説明しておりますので、まずはご一読いただく事を推奨いたします。
- Azure 上で利用している Windows 仮想マシンがフリーズしたら
https://blogs.technet.microsoft.com/jpaztech/2017/02/07/collectdump/
また、上記の投稿でもご案内しております通り、ご採取いただいたダンプの解析を Microsoft のサポート サービスで承る場合、原則としてプレミア サポート契約が必要となりますので、その点はご承知おきいただければと思います。IaaS として稼働する Azure VM 内の (Windows OS の) 設定や挙動に関してのお問い合わせは、Azure のサポート契約 (Developer / Standard / Professional Direct 等) では承ることが出来ず、Windows のサポート契約が必要となりますので、何卒ご了承ください。
- Azure IaaS における有償 Azure テクニカル サポートの対応範囲
https://blogs.technet.microsoft.com/jpaztech/2017/12/21/azure_technical_support_explained/
完全メモリ ダンプを採取するための 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) に、ダンプ ファイルが出力されておりますので、こちらを適宜ダウンロードください。
以上、ご参考になりましたら幸いです。
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。