7.2.4 スレッドダンプ
スレッドダンプとは,Javaのプロセス内で動作しているスレッドの情報が出力されるファイルです。
ここでは,スレッドダンプを採取するためのjheapprofコマンドについて説明します。
- jheapprof(日立クラス別統計情報付き拡張スレッドダンプの出力)
-
jheapprofコマンドの機能や形式,使用例などについて説明します。
なお,記述形式については,「9. コマンド」の「コマンドの記述形式」を参照してください。
- 機能
-
Javaプロセスについて,日立クラス別統計情報を含んだ拡張スレッドダンプを出力します。日立クラス別統計情報によって,各クラスのインスタンスが持つメンバの配下にあるすべてのインスタンスのサイズが取得できます。
- 形式
jheapprof [-i|-f] [-class クラス名] [-explicit|-noexplicit] [-fullgc|-copygc|-nogc] -p プロセスID
- 実行権限
-
なし
- 格納先フォルダ
-
-
JP1/ITSLM - Managerの場合:
JP1/ITSLM - Managerのインストール先フォルダ\mgr\system\psb\jdk\jre\bin\
-
JP1/ITSLM - URの場合:
JP1/ITSLM - URのインストール先フォルダ\ur\system\psb\jdk\jre\bin\
-
- 引数
-
-
-i
指定されたプロセスIDのプロセスに対して,このコマンドを実行してもよいかどうかをユーザーに確認します。
この指定を省略しても,-fオプションが指定されないかぎり,このオプションが有効になります。
-
-f
指定されたプロセスIDのプロセスに対して,このコマンドを実行してもよいかどうかをユーザーに確認しません。
-
-class クラス名
クラス名に指定されたクラス(インスタンス)をメンバに持つクラスの構造を一覧にしてスレッドダンプ中に出力します。指定するクラスのパッケージ名は「"」(引用符)で囲みます。
-
-explicit
インスタンス統計機能の統計対象にExplicitヒープを含めます。このオプションと-noexplicitオプションを同時に指定している場合,最後に指定しているオプションが有効になります。なお,JP1/ITSLMではこのオプションを指定する必要はありません。
-
-noexplicit
インスタンス統計機能の統計対象にExplicitヒープを含めません。このオプションと-explicitオプションを同時に指定している場合,最後に指定しているオプションが有効になります。なお,JP1/ITSLMではこのオプションを指定する必要はありません。
-
-fullgc
統計情報を出力する前に,フルガーベージコレクションを実行します。
このオプションと-copygcオプションまたは-nogcオプションを同時に指定している場合,最後に指定しているオプションが有効になります。
-
-copygc
統計情報を出力する前に,コピーガーベージコレクションを実行します。
このオプションと-fullgcオプションまたは-nogcオプションを同時に指定している場合,最後に指定しているオプションが有効になります。
-
-nogc
統計情報を出力する前に,ガーベージコレクションを実行しません。
このオプションと-fullgcオプションまたは-copygcオプションを同時に指定している場合,最後に指定しているオプションが有効になります。
-
-p プロセスID
日立クラス別統計情報を出力するJavaプログラムのプロセスIDを指定します。
-
- 注意事項
-
同じJavaプロセスに対して,2回以上このコマンドを実行できません。同じJavaプロセスに対して2回以上このコマンドを実行したい場合は,先に実行したjheapprofコマンドによってクラス別統計情報が拡張スレッドダンプに出力されたあとに実行してください。
Javaプロセスは起動時にMailSlotを使った通信の初期化処理を実行します。初期化に失敗した場合,メッセージを出力して処理を中断します。
引数に指定したプロセスIDのJavaプロセス所有者以外でもこのコマンドを実行できます。
次のメッセージが出力された場合,日立クラス別統計情報付き拡張スレッドダンプは出力されません。
項番
エラーメッセージ
説明
1
usage: jheapprof [-f|-i] [-class classname] [-explicit|-noexplicit] [-fullgc|-copygc|-nogc] [-garbage|-nogarbage] [-rootobjectinfo|-norootobjectinfo] [-rootobjectinfost size] -p process-id jheapprof
コマンドへの引数の指定が間違っています。
2
jheapprof: illegal option -- オプション
jheapprofコマンドに指定したオプションが不正です。
3
プロセスID: Now processing previous request, this request canceled
jheapprofコマンドの引数に指定したプロセスIDに該当するプロセスが,クラス別統計情報の出力中です。
4
プロセスID: Not owner
jheapprofコマンドの引数に指定したプロセスIDに0が指定されています。
5
jheapprof: can't create work file at temporary directory , this request canceled
一時ファイル用フォルダに参照・書き込み権限がない場合,日立クラス別統計情報付き拡張スレッドダンプを出力できません。日立クラス別統計情報付き拡張スレッドダンプの出力要求はキャンセルされます。
6
jheapprof: can't get temporary directory, this request canceled
一時ファイル用フォルダが取り出せない場合,日立クラス別統計情報付き拡張スレッドダンプを出力できません。日立クラス別統計情報付き拡張スレッドダンプの出力要求はキャンセルされます。
7
jheapprof: please delete 削除できなかったファイル名 in 削除できなかったファイルのフルパス
jheapprofコマンドを終了したときに,内部ファイルを削除できませんでした。削除できなかったファイルのフルパスにある,削除できなかったファイルを削除してください。
8
jheapprof: unexpected error occurred: <エラー原因>
jheapprofコマンド実行中に予期しないエラーが発生しました。
エラー原因には,例えば次のような表示がされます。
作業用メモリ確保に失敗した場合
malloc systemcall fail (errno=Y)
オブジェクトのクローズに失敗した場合
close systemcall fail (errno=Y)
9
jheapprof: can't communicate with process <プロセスID>
jheapprofコマンドの引数に指定したプロセスIDに該当するプロセスに問題があり,通信処理でエラーが発生しているため通信できません。または,jheapprofコマンドの引数に指定したプロセスIDに該当するプロセスがありません。
10
<プロセスID>: Timeout occurred. Java process not responding
jheapprofコマンドの引数に指定したプロセスIDに該当するプロセスから,一定時間内に日立クラス別統計出力処理終了の応答がありませんでした。
- 戻り値
-
戻り値
説明
0
コマンドが正常に終了しました。
1
コマンドでエラーが発生しました。
2
一定時間内に日立クラス別統計情報出力処理終了の応答がありませんでした。
- 使用例
-
プロセスIDが8662であるJavaプログラムの,日立クラス別統計情報付き拡張スレッドダンプを取得する場合のコマンド実行例を次に示します。
jheapprof -p 8662
このコマンドを実行すると,次のように,日立クラス別統計情報付き拡張スレッドダンプを出力してもよいかどうか,確認するメッセージが出力されます。
Force VM to output HitachiJavaHeapProfile: ? (y/n)
日立クラス別統計情報付き拡張スレッドダンプを出力する場合は,Yまたはyを入力します。Yまたはy以外の文字を入力すると,日立クラス別統計情報付き拡張スレッドダンプを出力しないでコマンドを終了します。
Force VM to output HitachiJavaHeapProfile: ? (y/n)y
日立クラス別統計情報付き拡張スレッドダンプを出力すると,実行中のJavaプログラムでは次のメッセージが出力されます。
Writing Java core to javacore8662.030806215140.txt... OK
また,実行中のJavaプログラムのカレントフォルダに,次のファイル名で拡張スレッドダンプが出力され,Javaプログラムの実行が継続されます。
javacore<プロセスID>.<日時>.txt