Javaアプリケーションが異常終了(プロセスが消滅)したときに、各OS上に用意されたクラッシュダンプやコアダンプを採取することにより、異常終了の原因を調査することができる場合があります。
ここでは、Windows(R)上で異常を調査する場合に採取する、クラッシュダンプの採取方法を説明します。
ワトソン博士について
ワトソン博士はMicrosoft Corporationのソフトウェアで、プログラムエラーのためのデバッガです。
プログラムエラーが発生すると、ワトソン博士が自動的にログファイルにデバッグ情報を出力します。なお、ログファイル名は、「drwtsn32.log」です。また、ログファイルの出力先は、ワトソン博士を起動して、設定することができます。
ワトソン博士の詳細は、Microsoft CorporationのWebページを参照してください。
ワトソン博士の設定
クラッシュダンプの採取には、Windows(R)に同梱されている「ワトソン博士」を使用します。
次の例を参考にして、「ワトソン博士」を設定してください。この設定を行うことにより、異常終了時に、自動的にクラッシュダンプが出力されるようになります。
ワトソン博士の設定例 (Windows Server(R) 2003、Windows(R) XPの場合)
MS-DOSコマンドプロンプトなどで“drwtsn32 -i”コマンドを投入します。[ワトソン博士が既定のアプリケーション デバッガとしてインストールされました。]のメッセージが表示されます。
更に、MS-DOSコマンドプロンプトなどで、“drwtsn32”コマンドを実行します。[Windows ワトソン博士]の設定画面が表示されますので、以下を確認してください。
[ログファイルパス(L)]、[クラッシュダンプ(P)]が正しく指定されているか
[クラッシュダンプの種類(Y)]を[完全]と設定しているか
[すべてのスレッド コンテキストをダンプ(A)]のチェックボックスがチェックされているか
[既定のログ ファイルに追加(E)]のチェックボックスがチェックされているか
[メッセージ ボックスによる通知(U)]のチェックボックスがチェックされているか
[クラッシュ ダンプ ファイルの作成(T)]のチェックボックスがチェックされているか
Windows Server(R) 2003 x64 Editionの場合
32ビットモード版のワトソン博士の環境設定を行う場合は、MS-DOSコマンドプロンプトなどで“%SystemRoot%\SysWow64\drwtsn32”コマンドを実行し、上述と同様の設定をしておく必要があります。
Windows(R) XP/Windows Server(R) 2003 以外の場合
ワトソン博士の機能が提供されていません。
ワトソン博士の代わりにWindowsエラー報告(Windows Error Reporting(WER))の機能を使用します。
次の例を参考にして、WERを設定してください。
WERの設定例
MS-DOSコマンドプロンプトなどで“regedit”コマンドを投入し、レジストリエディタを起動します。
「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps」キーを作成します。
LocalDumpsキーにREG_DWORD型でDumpTypeという値を作成し、「2」を設定します。
WERに関する設定の方法については、以下の情報も参照ください。
富士通製サーバ製品の場合:
http://primeserver.fujitsu.com/primergy/soft/ssupportguide/
上記製品以外の場合:
http://msdn.microsoft.com/en-us/library/bb787181.aspx
注意事項
Windows Server(R) 2003の初期版においては、ユーザダンプが出力されない問題をはじめとして、その他にもJavaの実行動作に影響を及ぼす問題などがあります。
たとえば、次のような問題があります。
http://support.microsoft.com/kb/836080/en-us
http://support.microsoft.com/kb/837018/en-us
http://support.microsoft.com/kb/841176/en-us
Windows Server(R) 2003を使用する場合は、Service Pack 1以降またはHotfixを適用してください。
ここでは、Solaris上でのコアダンプ採取のための注意事項を説明します。
コアダンプが出力されない場合の確認
コアダンプが出力されない場合の原因として、システムリソース等の問題がまず考えられます。カレントディレクトリの書込み権、ディスク容量、limit(1)コマンド結果を確認してください。
ここでは、Linux上でのコアダンプ採取のための注意事項を説明します。
コアダンプが出力されない場合の確認
コアダンプが出力されない場合の原因として、システムリソース等の問題がまず考えられます。カレントディレクトリの書込み権、ディスク容量、limit(1)コマンド結果を確認してください。
ハード/オペレーティングシステムの出荷時、またはオペレーティングシステムのUpdate適用により、デフォルトではコアダンプの出力が設定されていない場合があります。以下を参照して、コアダンプが出力されるように設定してください。
コアダンプ出力の設定方法
isstartコマンドでInterstageを起動させる場合
sh(bash)で"ulimit -c unlimited"コマンド実行後、Interstageを起動させます。ワークユニット起動ユーザがInterstage起動ユーザと違う場合は、ワークユニット起動前に"ulimit -c unlimited"コマンドを実行してから、ワークユニットを起動させます。
オペレーティングシステム起動時の自動起動でInterstageを起動する場合(RHEL5/RHEL6)
以下のファイルの記述を変更することにより、オペレーティングシステムの再起動後にcoreが出力されるようになります。
/etc/init.d/functions
「ulimit -S -c unlimited >/dev/null 2>&1」に変更します。
【修正前】
# make sure it doesn't core dump anywhere; while this could mask # problems with the daemon, it also closes some security problems ulimit -S -c 0 >/dev/null 2>&1 または、 ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0} >/dev/null 2>1
【修正後】
# make sure it doesn't core dump anywhere; while this could mask
# problems with the daemon, it also closes some security problems
ulimit -S -c unlimited >/dev/null 2>&1
/etc/rc2.d/S99startis
「ulimit -c unlimited」を追加します。
【修正前】
#!/bin/sh # Interstage Application Server # S99starttis : Interstage Application Server start procedure OD_HOME=/opt/FJSVod export OD_HOME /opt/FJSVod/bin/odalive > /dev/null while [ "$?" != "0" ] do sleep 1 /opt/FJSVod/bin/odalive > /dev/null done /opt/FJSVtd/bin/isstart
【修正後】
#!/bin/sh
# Interstage Application Server
# S99starttis : Interstage Application Server start procedure
OD_HOME=/opt/FJSVod
export OD_HOME
ulimit -c unlimited
/opt/FJSVod/bin/odalive > /dev/null
while [ "$?" != "0" ]
do
sleep 1
/opt/FJSVod/bin/odalive > /dev/null
done
/opt/FJSVtd/bin/isstart
オペレーティングシステム起動時の自動起動でInterstageを起動する場合(RHEL7)
unitファイルに以下の設定を追加してください。unitファイルでの定義方法については、"付録J RHEL7のunitファイルでの環境定義"を参照してください。
記載するセクション | 設定項目 | 設定値 |
---|---|---|
[Service] | LimitCORE | infinity |