Windows の予期しない再起動が発生した原因について
こんにちは。 Windows プラットフォーム サポートの服部です。
Windows をご利用のお客様から、OS の予期せぬシャットダウンのお問い合わせをよくいただきますが、原因としてどのようなことが考えられるのかをご紹介します。
サーバーやクライアント PC が突然再起動する現象が発生し、以下のイベントが記録されることがあります。
-------------------------------------
ソース: EventLog
イベント ID: 6008
メッセージ: 以前のシステム シャットダウン ( YYYY/MM/DD HH:MM:SS) は予期されていませんでした。
-------------------------------------
このイベントとは別に、以下のイベントが記録されている場合もあります。
----------------------------------------------
ソース: Microsoft-Windows-Kernel-Power
イベント ID:41
メッセージ:システムは正常にシャットダウンする前に再起動しました。
----------------------------------------------
これらのイベントからは前回のシャットダウンが正常ではなかったことはわかりますが、予期せぬシャットダウンが発生した理由はわかりません。
ご存知の方も多くいらっしゃると思いますが、STOP エラー (ブルー スクリーン) により再起動が発生し、このようなイベントが記録された場合はメモリダンプから発生原因の調査をすることが有効です。
ただし、メモリ ダンプを取得するよう設定しているにも関わらず、メモリ ダンプが生成されない場合もあります。また、STOP エラーが発生していないにも関わらず、予期せぬシャットダウンが発生する場合もあります。
以下に、予期せぬシャットダウンが発生した際の考えられる原因およびメモリ ダンプが作成されない原因についてもご説明いたします。
考えられる原因は?
------------------
予期せぬシャットダウンのイベントが記録される考えられる原因としましては、大きく分けて、ソフトウェア要因とハードウェア要因の 2 種類に分類できます。
- ソフトウェア要因
Windows のシャットダウンプロセスは、通常、次の流れで行われます。
1. デスクトップ上で動作するプロセスの停止
2. サービスプロセスの停止
3. デバイスの停止
4. I/O 要求の抑止
5. ファイルシステムキャッシュ情報のフラッシュ
6. ハードウェアのリセット/電源 OFF
Windows では、通常のシャットダウンとは異なるメカニズムでシャットダウンが行われると、EventLog サービスがソース: EventLog, ID 6008 のイベントを記録します。
また、EventLog サービスが正常終了した場合でも、その後シャットダウン処理が正しく行われないと、ソース: Microsoft-Windows-Kernel-Power の ID:41 イベントを記録します。
このイベントの検知については、技術情報がありますので、後述の参考文書 (KB2028504) をご参照ください。
通常、STOP エラーによる再起動が発生した場合には、 Eventlog イベント ID: 6008 と共に、次のような System Error イベント ID: 1003 および Save Dump イベント ID: 1001 が記録され、メモリ ダンプが生成されます。
<System Error イベント ID: 1003>
イベントの種類: エラー
イベント ソース: System Error
イベント カテゴリ: (102)
イベント ID: 1003
説明:
エラー コード xxxxxxxx、パラメータ1 xxxxxxxx、パラメータ2 xxxxxxxx, パラメータ3 xxxxxxxx、パラメータ4 xxxxxxxx.
<Save Dump イベント ID: 1001>
イベントの種類: 情報
イベント ソース: Save Dump
イベント カテゴリ: なし
イベント ID: 1001
説明:
このコンピュータはバグチェック後、再起動されました。
バグチェック: xxxxxxxx (xxxxxxxx, xxxxxxxx,
xxxxxxxx, xxxxxxxx)
ダンプが保存されました: C:\WINDOWS\MEMORY.DMP
なお、現象時には、状況によりダンプ ファイルが取得できないことも考えられますが、その場合は、System Error イベント ID: 1003 のエラー イベントが記録されます。
- 参考資料
Source: System Error Event ID: 1003
(Windows Operating System 5.2) - Technet Events And Errors Message Center:Message Details
メモリダンプ(memory.dmp)は既定の設定で C:\windows の直下に作成されますので、この情報をもとに、エラーの原因を調査することができます。
一般的に、ソフトウェア要因にて STOP エラーが発生する要因は以下の 2 種類です。
A. OS、もしくはドライバーの動作過程にて、ハンドル出来ない例外 (Secondchance exception) が発生する。
B. OS、もしくはドライバーの動作過程にて、異常が発生したため、その処理内で意図的に STOP エラーを発生させる。
A は、通常、OS 上で動作するアプリケーションだと、アプリケーション単体でクラッシュする状況です。これが OS の処理内で発生すると、システム全体が停止します。
B は、そのような本来予定していないデータを検知するなど、「このまま OS を動作させていると、安定した動作が約束されない」という状況をプログラム内で想定しており、そのような事態になった場合に発生します。
STOP エラーが発生した場合、「OS かドライバーの処理に問題があったためである」というのが原則です。
ただし、問題を検知した場合も、どのようなコンポーネントが問題であったのか等、詳細はメモリダンプを解析して確かめる必要があります。
原則としては、ソフトウェア要因の場合にはメモリダンプが記録されますが、ディスク ドライブの問題など、ダンプ自体が記録出来ない場合にはメモリダンプが記録されない場合もあります。このような場合には、原因の特定は困難です。
- ハードウェア要因
メモリ ダンプを取得するよう設定しているにも関わらず、メモリダンプが確認できない場合には、ハードウェア的な要因で発生している可能性が高いと考えられます。
メモリ、システム ボード、CPU などに異常が発生している場合に、サーバー異常を検知するハードウェア側の自動システム復旧の機能により再起動が行われる場合がございます。
この再起動によって、EventLog サービスの動作が中断され、ソース: EventLog, ID 6008 のイベントが記録されます。
ただし、この場合は、OS 側でエラ―を検知した状況ではないため、STOP エラー等は発生せずダンプ ファイルも生成されません。
メモリダンプが作成されない原因は?
----------------------------------
上述のように、メモリダンプが作成されない原因として、ハードウェア要因により自動システム復旧の機能で再起動が行われたことが考えられます。
この場合、STOP エラーの形跡が残らずメモリダンプも作成されない状況が発生しえます。
また、メモリダンプの作成途中で自動システム再起動が行われた場合も同様の結果となりメモリダンプが作成されません。
このような状況では、OS 側から原因を調べることはできず、ハードウェア観点から原因を確認していく必要があります。
また、メモリダンプが作成されない原因としては、以下のような設定や構成上の問題である場合もございます。
・ブートドライブ上のページング ファイル(pagefile.sys)が存在しない
・ブートドライブ上のページング ファイルのサイズが十分でない
・ブートドライブ上のページング ファイル が断片化している
・メモリダンプがすでに存在し、上書きをしない設定になっている([既存のファイルに上書きする] チェック ボックスがオフ)
・メモリダンプの保存先に、存在しないフォルダやドライブが指定されている
・メモリダンプの保存先に、Memory.dmp ファイル作成に必要な空き容量がない
予期せぬシャットダウンのイベントが記録されました場合、お問い合わせ環境で確認いただきたい項目としては以下の 2 点になります。
1.ハードウェア要因により自動システム復旧の機能で再起動が行われたかどうか確認します
2.ダンプを生成する設定や構成上の問題がないか確認します
上記の内容が予期せぬシャットダウン発生の問題についてご参考になれば幸いです。
補足情報
------------------------
Windows 7 および Windows Server 2008 R2 環境にて、以下の既知の問題が報告されています。
文書番号: 2549760
タイトル:レジストリの WaitToKillServiceTimeout 値は Windows 7 または Windows サーバー 2008 R2 で機能しません。
https://support.microsoft.com/kb/2549760/ja
(機械翻訳)
WaitToKillServiceTimeout registry valuedoes not work in Windows 7 or in Windows Server 2008 R2
https://support.microsoft.com/kb/2549760/en-us
下記のレジストリ値を設定することで、サービス コントロール マネージャが、サービスがシャットダウン要求を完了するまで待つ時間を設定することが出来ます。(ミリ秒単位で指定します。)
HKLM\SYSTEM\CurrentControlSet\Control\WaitToKillServiceTimeout
この設定値は、既定値として12秒に設定されておりましたが、Windows 7 または Windows サーバー 2008 R2 では、この設定値が適切に処理されておらず、設定値の有り無しにかかわらず、5秒にてサービスが強制的に終了されてしまいます。
その為に、例えば多くのサービスがインストールされている状態などにおいて、特定のアプリケーション サービスの終了処理に時間がかかってしまうと、イベントログサービスの停止処理にも影響を与える可能性があります。この場合に ID 6008 が記録される場合もあります。
修正プログラム (技術情報 2549760) をインストールするだけで、正しい既定値である12秒に設定されます。
また、修正を適用することで該当レジストリ値を変更して待機時間のチューニングが可能となります。
Windows 7 または Windows Server 2008 R2 をご利用のお客様は上記もご参考いただければと存じます。
-参考情報
文書番号: 972110
タイトル: Windows Server 2003 でカーネル ダンプファイルまたは完全メモリ ダンプ ファイルを生成する方法
URL: https://support.microsoft.com/kb/972110/ja
文書番号: 130536
タイトル: クラッシュ後Windows でメモリ ダンプ ファイルが保存されない
URL: https://support.microsoft.com/kb/130536/ja
文書番号: 824674
タイトル: Windows Server 2003 でカーネル メモリダンプを保存する際にカウンタが 99 で止まる
URL: https://support.microsoft.com/kb/824674/ja
文書番号: 2028504
タイトル:Windows 7 または Windows Server 2008 R2 で Windows カーネルイベント ID 41 エラー"システムは正常にシャットダウンする前に再起動しました" が発生する