備忘録的な

業務用

WindowsOS:予期せぬシャットダウン(STOPエラー)

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

http://www.microsoft.com/technet/support/ee/transform.aspx?ProdName=Windows+Operating+System&ProdVer=5.2&EvtID=1003&EvtSrc=System+Error&LCID=1033


メモリダンプ(memory.dmp)は既定の設定で
C:\windows の直下に作成されるので、この情報をもとに、エラーの原因を調査することができる。

 一般的に、ソフトウェア要因にて STOP エラーが発生する要因は以下の 2 種類である。
 
A.     OS、もしくはドライバーの動作過程にて、
ハンドル出来ない例外 (Secondchance exception) が発生する。

B.     OS、もしくはドライバーの動作過程にて、
異常が発生したため、その処理内で意図的に STOP エラーを発生させる

STOP エラーが発生した場合、「OS かドライバーの処理に問題があったためである」というのが原則である。

ただし、問題を検知した場合も、どのようなコンポーネントが問題であったのか等、詳細はメモリダンプを解析して確かめる必要がある。

原則としては、ソフトウェア要因の場合にはメモリダンプが記録されるが、ディスク ドライブの問題など、ダンプ自体が記録出来ない場合にはメモリダンプが記録されない場合もある。このような場合には、原因の特定は困難となる。


■ハードウェア要因

メモリ ダンプを取得するよう設定しているにも関わらず、
メモリダンプが確認できない場合には、ハードウェア的な要因で発生している可能性が高いと考えられる。

メモリ、システム ボード、CPU などに異常が発生している場合に、
サーバー異常を検知するハードウェア側の自動システム復旧の機能により再起動が行われる場合がある。

この再起動によって、EventLog サービスの動作が中断され、
ソース: EventLog, ID 6008 のイベントが記録される。

ただし、この場合は、OS 側でエラ―を検知した状況ではないため、STOP エラー等は発生せずダンプ ファイルも生成されない。

(要するにOS側がエラーを検知しないケースだとメモダンは生成されないということね)

■メモリダンプが作成されない原因は?
----------------------------------
 上述のように、メモリダンプが作成されない原因として、ハードウェア要因により自動システム復旧の機能で再起動が行われたことが考えられる。

この場合、STOP エラーの形跡が残らずメモリダンプも作成されない状況が発生しえる。
また、メモリダンプの作成途中で自動システム再起動が行われた場合も同様の結果となりメモリダンプが作成されない。
このような状況では、OS 側から原因を調べることはできず、ハードウェア観点から原因を確認していく必要がある。

また、メモリダンプが作成されない原因としては、
以下のような設定や構成上の問題である場合もある。
・ブートドライブ上のページング ファイル(pagefile.sys)が存在しない
・ブートドライブ上のページング ファイルのサイズが十分でない
・ブートドライブ上のページング ファイル が断片化している
・メモリダンプがすでに存在し、上書きをしない設定になっている([既存のファイルに上書きする] チェック ボックスがオフ)
・メモリダンプの保存先に、存在しないフォルダやドライブが指定されている
・メモリダンプの保存先に、Memory.dmp ファイル作成に必要な空き容量がない

予期せぬシャットダウンのイベントが記録された場合、当該環境で確認する項目としては以下の 2 点になる。
 
1.ハードウェア要因により自動システム復旧の機能で再起動が行われたかどうか確認
2.ダンプを生成する設定や構成上の問題がないか確認


補足情報
------------------------
Windows 7 および Windows Server 2008 R2 環境にて、

以下の既知の問題が報告されている。

文書番号: 2549760
タイトル:レジストリの WaitToKillServiceTimeout 値は Windows 7 または Windows サーバー 2008 R2 で機能しません。
http://support.microsoft.com/kb/2549760/ja
(機械翻訳)

WaitToKillServiceTimeout registry valuedoes not work in Windows 7 or in Windows Server 2008 R2
http://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: http://support.microsoft.com/kb/972110/ja

文書番号: 130536
タイトル: クラッシュ後Windows でメモリ ダンプ ファイルが保存されない
URL: http://support.microsoft.com/kb/130536/ja

文書番号: 824674
タイトル: Windows Server 2003カーネル メモリダンプを保存する際にカウンタが 99 で止まる
URL: http://support.microsoft.com/kb/824674/ja

文書番号: 2028504
タイトル:Windows 7 または Windows Server 2008 R2Windows カーネルイベント ID 41 エラー"システムは正常にシャットダウンする前に再起動しました" が発生する
URL: http://support.microsoft.com/kb/2028504/ja
 

出典:http://blogs.technet.com/b/askcorejp/archive/2013/03/28/eventlog6008.aspx