Javaアプリケーションが異常終了(プロセスが消滅)したときに、各OS上に用意されたクラッシュダンプやコアダンプを採取することにより、異常終了の原因を調査することができる場合があります。
ここでは、Windows(R)上で異常を調査する場合に採取する、クラッシュダンプの採取方法を説明します。
■ワトソン博士について
ワトソン博士はMicrosoft Corporationのソフトウェアで、プログラムエラーのためのデバッガです。
プログラムエラーが発生すると、ワトソン博士が自動的にログファイルにデバッグ情報を出力します。なお、ログファイル名は、「drwtsn32.log」です。また、ログファイルの出力先は、ワトソン博士を起動して、設定することができます。
ワトソン博士の詳細は、Microsoft CorporationのWebページを参照してください。
■ワトソン博士の設定
クラッシュダンプの採取には、Windows(R)に同梱されている「ワトソン博士」を使用します。
次の例を参考にして、「ワトソン博士」を設定してください。この設定を行うことにより、異常終了時に、自動的にクラッシュダンプが出力されるようになります。
ワトソン博士の設定例 (Windows(R) 2000の場合)
MS-DOSコマンドプロンプトなどで“drwtsn32 -i”コマンドを投入します。[ワトソン博士が既定のアプリケーション デバッガとしてインストールされました。]のメッセージが表示されます。
更に、MS-DOSコマンドプロンプトなどで、“drwtsn32”コマンドを実行します。[Windows 2000 ワトソン博士]の設定画面が表示されますので、以下を確認してください。
[ログファイルパス(L)]、[クラッシュダンプ(P)]が正しく指定されているか
[すべてのスレッド コンテキストをダンプ(A)]のチェックボックスがチェックされているか
[既定のログ ファイルに追加(E)]のチェックボックスがチェックされているか
[メッセージ ボックスによる通知(U)]のチェックボックスがチェックされているか
[クラッシュ ダンプ ファイルの作成(T)]のチェックボックスがチェックされているか
Windows(R) XP、Windows Server(R) 2003の場合
drwtsn32を立ち上げて、[クラッシュダンプの種類]を[完全]に設定しておく必要があります。
Windows Vista(R) SP1、Windows Server(R) 2008の場合
Windows Vista(R)、Windows Server(R) 2008ではワトソン博士の機能が提供されていません。
ワトソン博士の代わりにWindows Error Reporting(WER)の機能を使用します。
WERに関する設定の方法はOSのマニュアル、ヘルプを参照ください。
■注意事項
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)コマンド結果を確認してください。
また、Linuxではハード/OSの出荷時もしくはOSのUpdate適用により、デフォルトでコアダンプの出力が設定されていない場合があります。以下を実施してコアダンプが出力されるようにしてください。
《コアダンプ出力設定方法》
isstartコマンドでInterstageを起動させる場合
sh(bash)で"ulimit -c unlimited"コマンド実行後、Interstageを起動させます。ワークユニット起動ユーザがInterstage起動ユーザと違う場合は、ワークユニット起動前に"ulimit -c unlimited"コマンドを実行してから、ワークユニットを起動させます。
RCプロシジャでOS起動時に自動的にInterstageが起動するように設定されている場合
以下の方法を実施することで、OS再起動後にcoreが出力されるようになります。
/etc/init.d/functionsファイルに、
# 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
と記述されていますので、上記の設定で"0"を、"unlimited"に変更してください。
ulimit -S -c unlimited >/dev/null 2>&1
/etc/rc2.d/S99startisに、以下の<---の記述を追加してください。
#!/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