javacore(coreファイルとスレッドダンプの取得/UNIXの場合)
形式
javacore [-i|-f] [-force] -p <プロセスID>
機能
コマンド実行時のcoreファイルとスレッドダンプを同時に取得します。なお,このコマンドは,UNIX用です。
引数
- -i
-
coreファイルおよびスレッドダンプの出力処理の実行を確認するメッセージが表示されます。表示されたメッセージに対してyまたはnを入力します。このとき,yを入力するとスレッドダンプが出力されます。nを入力すると,何も出力しないで処理を終了します。省略した場合,-fオプションが指定されないかぎり,このオプションは有効です。
- -f
-
-iオプションを無効にします。省略した場合,-iオプションが有効になります。
- -force
-
javaプロセスが作成する/tmp/hsperfdata_<ユーザ名>/<プロセスID>ファイルの有無の確認をしないで,-pオプションで指定したプロセスIDのjavaプロセスに対してcoreを出力させます。
- -p <プロセスID>
-
<プロセスID>には,coreファイルとスレッドダンプを取得するjavaプログラムのプロセスIDを指定します。
戻り値
- 0:
-
正常終了しました。
- 1:
-
異常終了しました。
- 2:
-
一定時間内にcore生成処理終了の応答がありませんでした。
入力例
-
-fオプションを省略してjavacoreコマンドを実行します。
javacore -p 8326
-
coreファイルおよびスレッドダンプの出力処理の実行を確認するメッセージが表示されます。
send SIGQUIT to 8326:?(y/n)
-
coreファイルおよびスレッドダンプを取得する場合はyを,取得しない場合はnを入力します。
send SIGQUIT to 8326:?(y/n)y
-
coreファイルおよびスレッドダンプを取得すると,実行中のjavaプログラムでは次のメッセージが出力されます。
Now generating core file (javacore8662.030806215140.core)... done (スレッドダンプを出力) Writing Java core to javacore8662.030806215140.txt... OK
-
実行中のjavaプログラムは,カレントディレクトリに次のファイルを作成し,プログラムを継続します。
- coreファイル
-
javacore<プロセスID>.<日時>.core
- スレッドダンプ
-
javacore<プロセスID>.<日時>.txt
出力メッセージ
次のエラーメッセージまたは警告メッセージを出力した場合,coreファイルやスレッドダンプは取得されません。
項番 |
エラーメッセージ |
説明 |
---|---|---|
1 |
usage: javacore [-f|-i] [-force] -p process-id |
コマンドの引数が不正です。 |
2 |
javacore: can't create work file at /tmp, this request canceled |
/tmpに参照および書き込み権限がありません。 |
3 |
javacore: illegal option --<オプション> |
コマンドの引数に指定した<オプション>が不正です。 |
4 |
javacore: unexpected error occurred:<エラー原因> |
コマンド実行中に予期しないエラーが発生しました。 |
5 |
javacore: please delete <削除できなかったファイル名> in <削除できなかったファイルのフルパス> |
コマンド終了時にjavacoreコマンドの内部処理で作成したファイルを削除できませんでした。<削除できなかったファイルのフルパス>にある,削除できなかったファイルを削除してください。 |
6 |
<プロセスID>: No such process |
javacoreコマンドの引数に指定した<プロセスID>に該当するプロセスがありません。または,javacoreコマンドで指定した<プロセスID>に該当するプロセスがjavaプロセス以外でした。 |
7 |
<プロセスID>: Not owner |
実行ユーザは,コマンドの引数に指定した<プロセスID>に該当するプロセスのオーナーではありません。 |
8 |
<プロセスID>: Now processing previous request, this request canceled |
コマンドの引数に指定した<プロセスID>のプロセスが現在coreを生成中です。 |
9 |
<プロセスID>: Timeout occurred. Java process not responding. |
コマンドの引数に指定した<プロセスID>に該当するプロセスから,一定時間内にcore出力処理終了の応答がありませんでした。 |
注意事項
-
javacoreコマンドは,SIGQUITシグナルを指定されたプロセスに送信します。誤ってjavaプログラム以外を指定すると,ほかのプログラムが停止することがあります。
-
同じJavaプロセスに対して,同時にjavacoreコマンドは実行できません。前回のjavacoreコマンドによるcore出力処理が終了したあとに実行してください。
-
JavaVMプロセスが,スレッドダンプ取得要求に反応しないで無応答状態になっている場合には,javacoreコマンドによるcoreファイルも取得できません。この場合は,kill -6コマンドの実行によって,JavaVMプロセスを強制停止させてcoreファイルを取得してください。
-
Linuxの場合,gdbのgcoreコマンドでcoreを生成します。gdbがインストールされていない場合には,次のエラーメッセージが標準出力に出力されます。
Error occurred in generating core file, gdb not found.
また,インストールされているgdbのバージョンが古い場合には,次のエラーメッセージが標準出力に出力されます。
Error occurred in generating core file, gdb version 5.2 or later needed.
-
javacoreコマンドは,実行時に,/tmp/hsperfdata_<ユーザ名>/<プロセスID>ファイルを使用します。該当するファイルが存在しない場合は,javacore コマンドによるcoreファイルの出力はできません。ただし,-forceオプションを指定した場合,/tmp/hsperfdata_<ユーザ名>/<プロセスID>ファイルの有無の確認をしないで,-pオプションで指定したプロセスIDのJavaプロセスに対してcoreを出力させます。