Ask CORE

Microsoft Japan Windows Technology Support

Windows Server 2016 のシャットダウン時に STOP 0x9F エラーが発生する現象について

こんにちは、日本マイクロソフト Windows サポートチームです。

今回は Windows Server 2016 にて確認された、シャットダウン時のハングや STOP 0x9F エラーについて、その現象と回避方法を説明させていただきます。

 

 

現象

Windows Server 2016 をシャットダウン(または再起動)する際、コンソール画面に「シャットダウンしています」(または「再起動しています」)が表示された状態のまま先に進まず、10 分間経過後に STOP 0x9F エラーが発生するか、或いは、いつまで待ってもシャットダウン(または再起動)が完了しない場合があります。

 

原因

ページングファイルが C ドライブ(Windows フォルダーが存在するドライブ)以外のドライブに配置されている場合、C ドライブのディスクデバイスは他のデバイスよりも優先して電源状態を落としても構わないことを示すフラグがセットされます。

シャットダウン処理の過程で各デバイスの電源状態を落とすために電源 IRP が発行されますが、呼び出されたドライバーのコード領域がメモリ上に存在しない場合、ドライバーのコードをメモリに読み出す為の Read 要求をディスクに発行します。しかし、前述のフラグが C ドライブのディスクにセットされているため、既にディスクのデバイスは電源状態が落された状態で Read 要求が処理されない場合があります。この為、電源 IRP が発行されてから 10 分の間に処理が完了しないことをシステムが検知して STOP 0x9F を発生させます。

なお、STOP 0x9F エラーはここで説明した原因以外で発生する場合もあります。

 

回避方法

C ドライブにページングファイルを配置します。

本現象を回避する観点からは、ページングファイルのサイズには依存しない問題であるため、C ドライブに作成するページングファイルのサイズは小さくても問題ありません。作成できるページファイルのサイズは 16MB 以上です。

ただし、C ドライブのページングファイルが小さいと、システムがクラッシュ(BugCheck)した際にメモリダンプが作成されない可能性があります。C ドライブの空き領域が十分でない場合は、メモリダンプを採取するために以下の (a), (b) 何れかの対策を実施してください。

(a) 複数のドライブにページングファイルを配置し、優先度を変更する

1. [スタート] ボタンを右クリックし、[ファイル名を指定して実行] を実行します。

2. 「Regedit」と入力し、[OK] をクリックします。

3. 以下のレジストリ サブキーを探し、選択します。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management

4. PagingFiles をダブルクリックします。

5. [値のデータ] にて、一番上に 優先したいドライブのページ ファイルが来るように編集します。

例)E: ドライブに十分な空き領域があり、C: ドライブの空きが少ない場合は、以下のように E: ドライブのページングファイルを大きくしてメモリダンプの採取に備えると共に、本現象の回避のため C: ドライブには最小のサイズ 16MB のページングファイルを作成します。そして、E: ドライブがメモリダンプの出力に使われるよう、優先度を高く(先頭に来るように)設定します。

E:\pagefile.sys 8492 8492
C:\pagefile.sys 16 16

6.レジストリ エディターを終了し、変更を反映するために OS を再起動します。

 

(b) DedicatedDumpFile レジストリを設定する

1. [スタート] ボタンを右クリックし、[ファイル名を指定して実行] を実行します。

2. 「Regedit」と入力し、[OK] をクリックします。

3. 以下のレジストリ サブキーを探し、選択します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

4. メニューから [編集]-[新規]-[文字列値] をクリックします。

5. 名前を DedicatedDumpFile と指定します。

6. DedicatedDumpFile をダブルクリックします。

7. [値のデータ] に DedicatedDumpFile のファイルパスを指定します。

例)E: ドライブに作成する場合は以下のように指定します。(ファイル名は dedicateddumpfile.sys 以外の任意の名前で指定することができます。)

E:\dedicateddumpfile.sys

8. メニューから [編集]-[新規]-[DWORD(32ビット)値] をクリックします。

9. 名前を DumpFileSize と指定します。

10. DumpFileSize をダブルクリックします。

11. [値のデータ] に DedicatedDumpFile のファイルサイズを指定します。

例)完全メモリダンプを採取する為には、搭載された RAM サイズ+300MB 以上の
サイズを MB 単位で指定します。
8GB RAM の場合は [10進数] を選択して 8492 を指定します。

12. レジストリ エディターを終了し、変更を反映するために OS を再起動します。

 

ページングファイルの優先度設定と DedicatedDumpFile の設定に関する詳細情報は以下をご参照ください。

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

 

その他

現在本現象の詳細な再現条件などは調査中の段階です。今後発生条件や影響範囲が分かりましたら本ブログにアップデートする予定です。

なお、現在のところ Azure 上で稼働する Windows について本現象が発生したという事例はありません。

 

更新履歴

2017/12/25 [回避方法] を更新し、[その他] を追加しました。

2017/12/27 [現象] にSTOPエラー以外の症状(いつまで待ってもシャットダウンが完了しない)を追加しました。[回避方法] に Dedicated Dump 以外の方法を追加しました。