プロジェクト失敗談:ダンプファイルの設定
SEのブログのくせに技術的な話が全くないじゃないか!
とお叱りが来る前に、筆者が参加したプロジェクトで失敗した時の話を綴っていこうと思います。
マニアック?な話なので興味がある人向け。
Windowsのダンプファイルってご存知でしょうか?
急に使っていたPC画面がブルースクリーンとなって電源が落ちてしまう現象、俗にクラッシュと言いますが、クラッシュの際にPCのメモリ上の情報全てをファイルとして吐き出します。
そのファイルをダンプファイルと言います。
後にダンプファイルを回収して内容をチェックすることでクラッシュの原因を探ることが出来るわけですね。
以上が前置きです。
どんな失敗をしたかというと、ダンプファイルの出力サイズを設定する項目でミスをしてしまいました。
どういう事かと言うと、ダンプファイルのサイズは以下の項目で設定を行えます。
@(なし)
A最小メモリダンプ(256KB)
Bカーネルメモリダンプ
一見、以上の三度となるように見えまね。
(筆者もそう思いました。)
筆者はシステムがクラッシュした場合は情報が沢山欲しいので、どう見ても情報が出ないか、最小のダンプファイルしか出力されない@A止めてBの設定にする事としました。
それが間違いだったのです。
カーネルメモリダンプはシステムがクラッシュした際に2GBまでしかダンプファイルが出力されないのです。
クラッシュした際にメモリの情報を出力するということは、最低でもメモリと同サイズ以上のダンプファイルが出力されなければ、完全なメモリ情報を取得できないからです。
(ちなみにこの設定をしたシステムのメモリは8GBでした・・全然足りない!)
「そうは言っても@〜B以外に選択出来ないじゃない?」と言われるかもしれませんが、そこがWindowsの厭らしいところ。
レジストリを変更することで以下のようになりました。
※レジストリの変更内容は[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]の[CrashDumpEnabled]を値2から値1へ変更しました。
@(なし)
A最小メモリダンプ(256KB)
Bカーネルメモリダンプ
C完全メモリダンプ
Cを設定することでメモリの情報をすべて出力することができ、解決しました。
ちなみにこのレシピのソースは以下をご参照下さい。
How to generate a kernel or a complete memory dump file in Windows Server 2008
補足@:システムに搭載しているメモリが16GBとか32GBだった場合、完全メモリダンプを設定すると当然メモリと同サイズのダンプファイルがディスクに吐かれる事となるので、ダンプファイル出力先のディスク容量は考慮要!です。
補足A:擬似的にクラッシュを発生させ、キーボード操作でダンプファイルを取得する方法もあるので、参考までにお知らせします。初めてテストした時は本当にメモリと同サイズのダンプファイルが吐かれてビビりました。(まあ、吐かれないとまずいんだけど・・・)
キーボード操作でメモリ ダンプ ファイルを作成できる Windows の機能
とお叱りが来る前に、筆者が参加したプロジェクトで失敗した時の話を綴っていこうと思います。
マニアック?な話なので興味がある人向け。
Windowsのダンプファイルってご存知でしょうか?
急に使っていたPC画面がブルースクリーンとなって電源が落ちてしまう現象、俗にクラッシュと言いますが、クラッシュの際にPCのメモリ上の情報全てをファイルとして吐き出します。
そのファイルをダンプファイルと言います。
後にダンプファイルを回収して内容をチェックすることでクラッシュの原因を探ることが出来るわけですね。
以上が前置きです。
どんな失敗をしたかというと、ダンプファイルの出力サイズを設定する項目でミスをしてしまいました。
どういう事かと言うと、ダンプファイルのサイズは以下の項目で設定を行えます。
@(なし)
A最小メモリダンプ(256KB)
Bカーネルメモリダンプ
一見、以上の三度となるように見えまね。
(筆者もそう思いました。)
筆者はシステムがクラッシュした場合は情報が沢山欲しいので、どう見ても情報が出ないか、最小のダンプファイルしか出力されない@A止めてBの設定にする事としました。
それが間違いだったのです。
カーネルメモリダンプはシステムがクラッシュした際に2GBまでしかダンプファイルが出力されないのです。
クラッシュした際にメモリの情報を出力するということは、最低でもメモリと同サイズ以上のダンプファイルが出力されなければ、完全なメモリ情報を取得できないからです。
(ちなみにこの設定をしたシステムのメモリは8GBでした・・全然足りない!)
「そうは言っても@〜B以外に選択出来ないじゃない?」と言われるかもしれませんが、そこがWindowsの厭らしいところ。
レジストリを変更することで以下のようになりました。
※レジストリの変更内容は[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]の[CrashDumpEnabled]を値2から値1へ変更しました。
@(なし)
A最小メモリダンプ(256KB)
Bカーネルメモリダンプ
C完全メモリダンプ
Cを設定することでメモリの情報をすべて出力することができ、解決しました。
ちなみにこのレシピのソースは以下をご参照下さい。
How to generate a kernel or a complete memory dump file in Windows Server 2008
補足@:システムに搭載しているメモリが16GBとか32GBだった場合、完全メモリダンプを設定すると当然メモリと同サイズのダンプファイルがディスクに吐かれる事となるので、ダンプファイル出力先のディスク容量は考慮要!です。
補足A:擬似的にクラッシュを発生させ、キーボード操作でダンプファイルを取得する方法もあるので、参考までにお知らせします。初めてテストした時は本当にメモリと同サイズのダンプファイルが吐かれてビビりました。(まあ、吐かれないとまずいんだけど・・・)
キーボード操作でメモリ ダンプ ファイルを作成できる Windows の機能
この記事へのコメント