4.2.5 jheapprof
クラス別統計情報付き拡張スレッドダンプの出力
書式
jheapprof [-i|-f] [-class クラス名] [-staticroot|-nostaticroot] [-explicit|-noexplicit] [-fullgc|-copygc|-nogc] [-garbage|-nogarbage] [-rootobjectinfo|-norootobjectinfo] [-rootobjectinfost 値] -p プロセスID
格納先
Application Serverインストールディレクトリー\jdk\jre\bin\
機能
引数に指定したプロセスIDのjavaプロセスについて、クラス別統計情報を含んだ拡張スレッドダンプを出力します。
各クラスのインスタンスが持つメンバーの配下にあるすべてのインスタンスのサイズを、クラスごとに統計情報として拡張スレッドダンプに出力できます。クラス別統計情報を複数回出力すると、Javaオブジェクトのサイズの変化などを確認できます。これらの情報は、メモリーリークの検出などに利用できます。
実行権限
引数のプロセスIDで指定するjavaプロセスと同一のユーザーで実行してください。
引数
- -i
-
クラス別統計情報付き拡張スレッドダンプの出力処理の実行を確認するメッセージが表示されます。表示されたメッセージに対してyまたはnを入力します。このとき、yを入力すると、クラス別統計情報を含んだ拡張スレッドダンプが出力されます。nを入力すると、何も出力しないで処理を終了します。省略した場合、-fオプションが指定されないかぎり、このオプションは有効です。
- -f
-
-iオプションを無効にします。省略した場合、-iオプションが有効になります。
- -class クラス名
-
クラス名に指定したクラス(インスタンス)をメンバーに持つクラスの構造を、一覧にしてスレッドダンプ中に出力します。
- -staticroot
-
staticフィールドを基点とした参照関係情報出力機能を有効にし、staticフィールドを基点とした参照関係情報を出力します。省略した場合、-nostaticrootオプションが有効になります。
このオプションの前提は、-classオプションです。-classオプションの指定がない場合、このオプションは無効になります。
なお、このオプションと-nostaticrootオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -nostaticroot
-
staticフィールドを基点とした参照関係情報出力機能を無効にします。
なお、このオプションと-staticrootオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -explicit
-
インスタンス統計機能の統計対象にExplicitヒープを含めます。省略した場合、-noexplicitオプションが指定されないかぎり、このオプションは有効です。なお、このオプションと-noexplicitオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -noexplicit
-
インスタンス統計機能の統計対象にExplicitヒープを含めません。省略した場合、-explicitオプションが有効になります。なお、このオプションと-explicitオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -fullgc
-
統計する前に実行するGCにFullGCを設定します。省略した場合、-copygcオプションや-nogcオプションが指定されないかぎり、このオプションは有効です。なお、このオプションと-copygcオプションまたは-nogcオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -copygc
-
統計する前に実行するGCにCopyGCを設定します。このオプションと-nogcオプションを省略した場合、-fullgcオプションが有効になります。
なお、このオプションと-fullgcオプションまたは-nogcオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -nogc
-
統計する前にGCを実行しません。このオプションと-copygcオプションを省略した場合、-fullgcオプションが有効になります。なお、このオプションと-fullgcオプションまたは-copygcオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -garbage
-
Tenured領域内不要オブジェクト統計機能が有効になり、Tenured領域内の不要なオブジェクトを統計対象としたクラス別統計情報を出力します。また、インスタンス統計機能とSTATICメンバー統計機能は無効になります。省略した場合、-nogarbageオプションが有効になります。統計前GC選択機能については、-fullgcオプション、-copygcオプションが無効になり、-nogcオプションは有効になります。このため、統計処理前にGCを実行しません。なお、このオプションと-nogarbageオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -nogarbage
-
Tenured領域内不要オブジェクト統計機能が無効になります。そのため、Tenured領域内の不要なオブジェクトを統計対象としたクラス別統計情報は出力しません。省略した場合、-garbageオプションが指定されないかぎり、このオプションは有効です。なお、このオプションと-garbageオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -rootobjectinfo
-
Tenured増加要因の基点オブジェクトリスト出力機能が有効になり、Tenured増加要因の基点オブジェクトリストを出力します。
このオプションは、-garbageオプションが有効であることが前提です。そのため、-nogarbageオプションを有効にすると、このオプションは無効になります。省略した場合、-norootobjectinfoオプションが指定されないかぎり、このオプションは有効です。なお、このオプションと-norootobjectinfoオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -norootobjectinfo
-
Tenured増加要因の基点オブジェクトリスト出力機能が無効になります。そのため、Tenured増加要因の基点オブジェクトリストは出力しません。省略した場合、-rootobjectinfoオプションが有効になります。なお、このオプションと-rootobjectinfoオプションを同時に指定している場合、最後に指定しているオプションが有効になります。
- -rootobjectinfost 値
-
Tenured増加要因の基点オブジェクトリストの情報量を調節します。インスタンスサイズの合計が、指定した値以上のクラス情報だけが、Tenured増加要因の基点オブジェクトリストに出力されます。
このオプションは、-rootobjectinfoオプションが有効であることが前提です。そのため、-norootobjectinfoオプションを有効にすると、このオプションは無効になります。値には0以上の自然数を指定できます。自然数以外や、文字列を指定した場合は、引数の指定に誤りがあるという内容のエラーメッセージが出力されて終了します。
デフォルト値:0
- -p プロセスID
-
プロセスIDには、クラス別統計情報を出力するjavaプログラムのプロセスIDを指定します。
型:Integer
指定できる値を次に示します。
-
0〜4294967295
-
出力形式
クラス別統計情報を拡張スレッドダンプに出力するには、jheapprofコマンドを利用します。クラス別統計情報を出力したいJavaプロセスや、参照関係情報を出力したいクラスを指定して、jheapprofコマンドを実行します。
jheapprofコマンド実行時には、次の指定ができます。
-
クラス別統計情報にExplicitヒープの情報を出力するかどうかの指定
-
クラス別統計情報を取得する前にGCを実行するかどうかの指定
-
jheapprofコマンドの実行例を次に示します。
ここでは、プロセスIDが2463のJavaプロセスのクラス別統計情報を出力します。
-
-pオプションに、クラス別統計情報を出力したいJavaプロセスのプロセスIDを指定して、jheapprofコマンドを実行します。
% jheapprof -p 2463
jheapprofコマンドで-fオプションを省略している場合、次の確認メッセージが表示されます。
クラス別統計情報付き拡張スレッドダンプを出力するかどうかを確認するメッセージが次の形式で表示されます。
Force VM to output HitachiJavaHeapProfile: ? (y/n)
-
yを入力します。
クラス別統計情報付き拡張スレッドダンプが出力されます。実行中のjavaプログラムでは次のメッセージが出力されます。
Writing Java core to javacore2463.030806215140.txt... OK
実行中のjavaプログラムは、カレントディレクトリーにクラス別統計情報付き拡張スレッドダンプ(javacoreプロセスID.日時.txt)を作成し、プログラムを継続します。
-
-
Explicitヒープの情報をクラス別統計情報に出力する場合
次の条件を満たしている場合、Explicitヒープの情報をクラス別統計情報に出力できます。
-
Java VM起動オプションに-XX:+HitachiUseExplicitMemoryを指定している。
-
アプリケーションの実装、または実行環境(J2EEサーバ)の設定でExplicitヒープが使用されている。
Explicitヒープの情報をクラス別統計情報に出力する場合は、jheapprofコマンドに-explicitオプションを指定して実行します。
-
-
GCの実行有無を指定する場合
クラス別統計情報を出力する前に、GCを実行するかどうかを選択できます。この機能を統計前のGC選択機能といいます。クラス別統計情報を出力する前に、GCを実行するかどうかは、jheapprofコマンドに次のどれかのオプションを指定して実行します。
-
-fullgc
FullGCを実行してから、クラス別統計情報を出力します。
-
-copygc
CopyGCを実行してから、クラス別統計情報を出力します。
-
-nogc
GCを実行しないで、クラス別統計情報を出力します。
-
入力例
-
-fオプションを省略してjheapprofコマンドを実行します。
% jheapprof -p 2463
-
クラス別統計情報付き拡張スレッドダンプを出力するかどうかの確認メッセージが表示されます。
Force VM to output HitachiJavaHeapProfile: ? (y/n)
-
クラス別統計情報付き拡張スレッドダンプを出力する場合はyを、出力しない場合はnを入力します。
Force VM to output HitachiJavaHeapProfile: ? (y/n)y
-
クラス別統計情報付き拡張スレッドダンプを出力すると、実行中のjavaプログラムでは次のメッセージが出力されます。
Writing Java core to javacore2463.030806215140.txt... OK
-
実行中のjavaプログラムは、カレントディレクトリーにクラス別統計情報付き拡張スレッドダンプ(javacoreプロセスID.日時.txt)を作成し、プログラムを継続します。
戻り値
戻り値 |
説明 |
---|---|
0 |
正常終了しました。 |
1 |
異常終了しました。 |
2 |
一定時間内にクラス別統計情報出力処理終了の応答がありませんでした。 |
出力メッセージ
次のエラーメッセージまたは警告メッセージが出力された場合、クラス別統計情報付き拡張スレッドダンプは出力されません。
項番 |
エラーメッセージ |
説明 |
---|---|---|
1 |
usage: jheapprof [-f|-i] [-class classname] [-staticroot|-nostaticroot] [-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コマンド実行中に予期しないエラーが発生しました。 エラー原因には、例えば下記のような表示がされます。
|
9 |
jheapprof: can't communicate with process プロセスID |
jheapprofコマンドの引数に指定したプロセスIDに該当するプロセスに問題があり、通信処理でエラーが発生しているため通信できません。または、jheapprofコマンドの引数に指定したプロセスIDに該当するプロセスがありません。 |
10 |
プロセスID: Timeout occurred. Java process not responding |
jheapprofコマンドの引数に指定したプロセスIDに該当するプロセスから、一定時間内にクラス別統計出力処理終了の応答がありませんでした。 |
11 |
プロセスID: Failed to retry GC. Java process is GC locked. |
jheapprofコマンドの引数に指定したプロセスIDのプロセスが、GC実行が抑止される状態のため、GC処理を実行できませんでした。 |
注意事項
-
jheapprofコマンドはプログラムの開発用ユーティリティーとして提供しているものです。システムの運用では使用しないでください。
-
同じjavaプロセスに対して、同時にjheapprofコマンドは実行できません。前回のjheapprofコマンドによるクラス別統計情報が拡張スレッドダンプに出力されたあとに実行してください。
-
Javaプロセスは起動時にMailSlotを使った通信の初期化処理を実行します。初期化に失敗した場合、メッセージを出力して処理を中断します。
-
このコマンドは、Windows APIのGetTempPath()関数で得られるディレクトリーに一時ファイルを作成します。このコマンドを正常に動作させるためには、このディレクトリーに書き込み権限が必要です。また、Java VMプロセス起動中はこのディレクトリーを削除しないでください。なお、このディレクトリーにWindowsのシステムディレクトリーを指定しないでください。
-
Explicitヒープをインスタンス統計情報の統計対象に含めるためには、-XX:+HitachiUseExplicitMemoryを指定して、明示管理ヒープ機能を有効にしているjavaプロセスに対して、jheapprofコマンドで-explicitオプションを指定してください。なお、-XX:-HitachiUseExplicitMemoryを指定して、明示管理ヒープ機能を無効にしている場合、-explicitを指定してもExplicitヒープ内のインスタンスはインスタンス統計情報の統計対象になりません。