3.1.1 資料の取得方法
トラブルの原因の切り分けに使用する資料の取得方法について説明します。
- 〈この項の構成〉
(1) エラーリポートファイル
JavaVMが出力するエラーリポートファイルの取得について説明します。
JavaVMでクラッシュが発生した場合,JavaVMはデバッグ情報を標準出力とエラーリポートファイルに出力します。エラーリポートファイルが出力されるタイミングを次に示します。
-
JNIの中でシグナルが発生したとき
-
JavaVMでCヒープ不足が発生したとき
-
JavaVMで予期しないシグナルが発生したとき
-
JavaVMでInternal Error(内部論理エラー)が発生したとき
ただし,エラーリポートファイルの作成時にシグナルやメモリ不足が発生した場合,このファイルは作成されません。
エラーリポートファイルの出力先および出力ファイル名は,次のとおりです。
<カレントディレクトリ>/hs_err_pid<JavaプロセスのプロセスID>.log
- メモ
-
Cヒープが不足した場合,次の順序でメッセージ出力およびcoreダンプの生成が実行されます。必要な情報を取得してください。
-
Cヒープ不足を示すメッセージログが,エラーリポートファイルおよび標準出力に出力されます。
-
1.の実行中にメモリ不足が発生した場合,メッセージが標準出力に出力されます。
-
簡易メッセージの出力処理中にさらにメモリ不足が発生した場合,メッセージおよびエラーログファイルの出力処理を中止して,coreダンプを生成します。
-
- 重要
-
クラッシュが発生した場合やCヒープ不足時に標準出力に出力されるJavaVMの情報は,-XX:+StandardLogToHitachiJavaLogオプションを指定しても日立JavaVMログファイルに出力されません。コンソールにだけ出力されます。
-XX:+StandardLogToHitachiJavaLogオプションについては,「-XX:[+|-]StandardLogToHitachiJavaLog(標準出力のログファイル出力オプション)」を参照してください。
(2) coreダンプ/スタックトレースファイル
coreダンプの取得について,説明します。
プロセスがダウンした場合,OSによって出力されたcoreダンプを取得します。
coreダンプを取得したあとに,coreダンプからスタックトレースファイルを取得する場合は,javatraceコマンドを実行してください。スタックトレース情報は,JavaVMの異常終了の原因を究明するために必要な情報です。
コマンド詳細については,「javatrace(トレース情報の収集)」を参照してください。
javatraceコマンドの実行形式を次に示します。
javatrace <coreダンプのファイル名称> <coreダンプを生成した実行ファイルの名称>
JavaVMが異常終了して,「core.<プロセスID>」というファイル名称でcoreダンプが作成されているときにこのコマンドを実行すると,実行結果として,カレントディレクトリに「javatrace.log」というファイルが出力されます。スタックトレースファイルの出力先は,<coreダンプを生成した実行ファイルの名称>にパス名を指定することで,出力先を変更できます。
JavaVMが異常終了してcoreダンプが作成されたときに出力されるメッセージの例を,次に示します。実行するjavatraceコマンド文字列がメッセージ内に表示されます。文字列内のcoreは,core.<プロセスID>とします。
: # You can get further information from javatrace.log file generated # by using javatrace command. # usage: javatrace core-file-name loadmodule-name [out-file-name] [-l(library-name)...] # Please use javatrace command as follows and submit a bug report # to Hitachi with javatrace.log file: # [/opt/Cosminexus/jdk/bin/javatrace core /opt/Cosminexus/jdk/bin/java]
また,実行中のJavaプロセスでcoreダンプとスレッドダンプを同時に取得できます。実行中のJavaプロセスでcoreダンプとスレッドダンプを同時に取得する場合は,javacoreコマンドを実行してください。コマンド詳細については,「javacore(coreファイルとスレッドダンプの取得)」を参照してください。
javacore -p <JavaプロセスのプロセスID>
プロセスIDの取得方法は,「(3) JavaVMのスレッドダンプファイル」の「参考」を参照してください。
上記の形式でコマンドを実行すると,次のメッセージが出力されます。
send SIGQUIT to 8662: ? (y/n)
「y」を入力すると,実行中のJavaプログラムのカレントディレクトリに,"javacore<プロセスID>.<出力日時>.core"(core ダンプ),および"javacore<プロセスID>.<出力日時>.txt"(スレッドダンプ)が出力されます。「n」を入力すると,coreダンプおよびスレッドダンプを取得しないでコマンドの実行を終了します。
coreダンプおよびスレッドダンプを取得すると,実行中のJavaプログラムには,次のメッセージが出力されます。
Now generating core file (javacore8662.030806215140.core)... done : Writing Java core to javacore8662.030806215140.txt... OK
- 重要
-
次のシェルコマンドを実行して,coreダンプファイルサイズの上限値を無制限にしてください。
- csh(Cシェル)の場合
-
limit coredumpsize unlimit
- sh(標準シェル)およびkshの場合
-
ulimit -c unlimited
また,これらの設定に加え,シェルコマンドを実行して,ファイルサイズの上限値を無制限にしておくことをお勧めします。
- csh(Cシェル)の場合
-
limit filesize unlimit
- sh(標準シェル)およびkshの場合
-
ulimit -f unlimited
(3) JavaVMのスレッドダンプファイル
スレッドダンプファイルを取得する方法について説明します。
スレッドダンプファイルを取得するには,killコマンドを実行します。
kill -3 <JavaプロセスのプロセスID>
時間の経過に応じた各スレッドの状態遷移を確認するときには,目安として3秒おきに10回程度実行します。
スレッドダンプファイルの出力先および出力ファイル名は,次のとおりです。
<カレントディレクトリ>/javacore<プロセスID>.<出力日時>※.txt
- 注※
-
出力日時の形式はYYMMDDhhmmssです。
YY:年(西暦で下2桁),MM:月(2桁),DD:日(2桁)
hh:時間(24時間表記),mm:分(2桁),ss:秒(2桁)
スレッドダンプファイルは,出力先を変更できます。
出力先を変更する場合は,JAVACOREDIR環境変数に出力先を指定してください。JAVACOREDIR環境変数の詳細については,「5.6 日立JavaVMで使用する環境変数の詳細」を参照してください。
- メモ
-
コマンドに指定するプロセスIDは,次の方法で取得できます。
ps -ef | grep <識別名>
スレッドダンプを取得するプロセスの識別ができるように,プロセス起動時のオプションに識別可能な任意の名称(-D“<識別名>”)を指定してください。
任意の識別名(JavaServer01)でスレッドダンプを取得する例を示します。
$ java -DJavaServer01 A-Server & $ ps -ef | grep JavaServer01 root 24249 24165 99 14:45 pts/1 00:17:57 java -DJavaServer01 A-Server : $ kill -3 24249
なお,スレッドダンプには,コマンドラインが出力されています。コマンドライン中の-D“<識別名>”で,どのサーバのスレッドダンプであるかを判別できます。
Fri Jul 19 13:27:07 2019 Full thread dump Java HotSpot(TM) 64-Bit Server VM (11+28-CDK0987-20190712 mixed mode) /opt/Cosminexus/jdk/bin/java -D[Server:server-one] -Xms64m -Xmx512m -server … System Properties :
(4) JavaVMログファイル
JavaVMログファイルを取得するための設定について説明します。
JavaVMログとは,製品が標準のJavaVMに追加した拡張オプションを使用して取得できるログです。標準のJavaVMよりも,多くのトラブルシュート情報が取得できます。このファイルには,JavaVMのGCのログも出力されます。
JavaVMログファイルの出力先および出力ファイル名は,次のとおりです。カレントディレクトリに「javalogxx.log」という名称で出力されます。xxは01から始まる2桁の通番です。
<カレントディレクトリ>/javalogxx.log
JavaVMログファイルは,出力先およびファイル名を変更できます。
出力先を変更する場合は,-XX:HitachiJavaLog:<ディレクトリおよびファイル名称>オプションを指定してください。指定した出力先に指定したファイル名称で出力されます。
-XX:HitachiJavaLogオプションの詳細については,「5.2 日立JavaVM拡張オプションの詳細」を参照してください。