4.2.1 eheapprof
Explicitヒープ詳細情報付き拡張スレッドダンプの出力
書式
eheapprof [-i|-f] [-freeratio] -p プロセスID
格納先
Application Serverインストールディレクトリー\jdk\jre\bin\
機能
引数に指定したプロセスIDのjavaプロセスについて、Explicitヒープ詳細情報を含んだ拡張スレッドダンプを出力します。また、Explicitメモリーブロック内のオブジェクトの統計情報、およびExplicitメモリーブロックの解放率情報も拡張スレッドダンプに出力できます。
実行権限
引数のプロセスIDで指定するjavaプロセスと同一のユーザーで実行してください。
引数
- -i
-
Explicitヒープ詳細情報付き拡張スレッドダンプの出力処理の実行を確認するメッセージが表示されます。表示されたメッセージに対してyまたはnを入力します。このとき、yを入力すると、Explicitヒープ詳細情報を含んだ拡張スレッドダンプが出力されます。nを入力すると、何も出力しないで処理を終了します。省略した場合、-fオプションが指定されないかぎり、このオプションは有効です。
- -f
-
-iオプションを無効にします。省略した場合、-iオプションが有効になります。
- -freeratio
-
Explicitメモリーブロックのオブジェクト解放率情報の出力を有効にして、拡張スレッドダンプを出力します。
このオプションを指定してeheapprofコマンドを実行すると、Java VMによって次の処理が実行され、オブジェクト解放率情報が取得されます。
-
FullGC
-
Explicitメモリーブロックの解放処理
これらの処理によって、アプリケーションの実行が数秒間止まるおそれがあるため、Explicitメモリーブロックのオブジェクト解放率情報は、システム開発時や業務停止時間中に出力することをお勧めします。
-
- -p プロセスID
-
Explicitヒープ詳細情報を含んだ拡張スレッドダンプを出力するjavaプログラムのプロセスIDを指定します。
型:Integer
指定できる値を次に示します。
-
0〜4294967295
-
出力形式
「Explicitメモリーブロックのオブジェクト解放率情報」が無効な場合
Explicit Heap Status -------------------- max EH_MAX, total EH_TOTAL, used EH_USED, garbage EH_GARB (EH_PER1 used/max, EH_PER2 used/total, EH_PER3 garbage/used), EM_NUMS spaces exist Explicit Memories(EM_MGR_PTR) "EM_NAME" eid=EID(EM_PTR)/EM_TYPE, total EM_TOTAL, used EM_USED, garbage EM_GARB (EM_PER1 used/total, EM_PER2 garbage/used, FL_BLOCKS blocks) EM_STAT deployed objects ________________Size__Instances__Class________________ ISIZE INUM CNAME ... AISIZE AINUM total
「Explicitメモリーブロックのオブジェクト解放率情報」が有効な場合
Explicit Heap Status -------------------- max EH_MAX, total EH_TOTAL, used EH_USED, garbage EH_GARB (EH_PER1 used/max, EH_PER2 used/total, EH_PER3 garbage/used), EM_NUMS spaces exist Explicit Memories(EM_MGR_PTR) "EM_NAME" eid=EID(EM_PTR)/EM_TYPE, total EM_TOTAL, used EM_USED, garbage EM_GARB (EM_PER1 used/total, EM_PER2 garbage/used, FL_BLOCKS blocks) EM_STAT deployed objects ________________Size__Instances__FreeRatio__Class________________ ISIZE INUM FRATIO CNAME ... AISIZE AINUM total
出力形式で示した各項目について説明します。
分類 |
出力項目 |
出力内容 |
意味 |
---|---|---|---|
Explicitヒープ情報 |
EH_MAX |
<const>K |
Explicitヒープの最大サイズが出力されます。単位はキロバイトです。 |
EH_TOTAL |
<const>K |
確保済みExplicitヒープサイズが出力されます。単位はキロバイトです。 |
|
EH_USED |
<const>K |
利用済みExplicitヒープサイズが出力されます。単位はキロバイトです。 |
|
EH_GARB |
<const>K |
Explicitヒープの内部状態が出力されます。 |
|
EH_PER1 |
<decimal>% |
Explicitヒープ利用率(EH_USED/EH_MAX)が%表記で出力されます。 |
|
EH_PER2 |
<decimal>% |
Explicitヒープ利用率(EH_USED/EH_TOTAL)が%表記で出力されます。 |
|
EH_PER3 |
<decimal>% |
Explicitヒープの内部状態が出力されます。 |
|
EM_NUMS |
<const> |
有効なExplicitメモリーブロックの数が出力されます。 |
|
EM_MGR_PTR |
<ptr> |
Explicitヒープ制御のための内部情報があるメモリーアドレスが出力されます。障害調査時などに利用します。 |
|
Explicitメモリーブロック情報 |
EM_NAME |
<letters> |
Explicitメモリーブロックの名称が出力されます。 Explicitメモリーブロックの名称に多バイト文字が含まれている場合、出力内容は不定です(通常は文字化けして出力されます)。 Explicitメモリーブロックの初期化とほぼ同時に出力された場合や、Java VMが内部で生成したExplicitメモリーブロックの場合は、"NULL"が出力されることがあります。 |
EID |
<const> |
ExplicitメモリーブロックのIDが出力されます。 |
|
EM_PTR |
<ptr> |
Explicitメモリーブロック内部構造があるメモリーアドレスが出力されます。障害調査時などに利用します。 |
|
EM_TYPE |
R|B|A |
Explicitの種別が出力されます。 Rは、Application Serverの内部で利用されているExplicitメモリーブロックを示します。 Bは、アプリケーションが利用しているExplicitメモリーブロックを示します。 Aは、自動配置設定ファイルを使って指定したExplicitメモリーブロックを示します。 |
|
EM_TOTAL |
<const>K |
Explicitメモリーブロックのメモリー確保済みサイズが出力されます。単位はキロバイトです。 |
|
EM_USED |
<const>K |
Explicitメモリーブロックの利用済みサイズが出力されます。単位はキロバイトです。 |
|
EM_GARB |
<const>K |
Explicitメモリーブロックの内部状態が出力されます。単位はキロバイトです。 |
|
EM_PER1 |
<decimal>% |
Explicitメモリーブロック利用率(EM_USED/EM_TOTAL)が%表記で出力されます。 |
|
EM_PER2 |
<decimal>% |
Explicitメモリーブロックの内部状態が出力されます。 |
|
FL_BLOCKS |
<const> |
常に0が出力されます。 |
|
EM_STAT |
Enable|Disable |
Explicitメモリーブロックのサブ状態が出力されます。 |
|
オブジェクト統計情報※1 |
ISIZE |
<const> |
あるクラスをインスタンス化したオブジェクトのExplicitメモリーブロック内のサイズが出力されます。 |
INUM |
<const> |
あるクラスをインスタンス化したオブジェクトのExplicitメモリーブロック内の個数が出力されます。 |
|
CNAME |
<letters> |
ISIZEおよびINUMが示すクラスの完全クラス名が出力されます。 |
|
AISIZE |
<const> |
Explicitメモリーブロック内の全オブジェクトの合計サイズが出力されます。 |
|
AINUM |
<const> |
Explicitメモリーブロック内の全オブジェクトの個数が出力されます。 |
|
オブジェクト解放率情報※2 |
FRATIO |
<decimal>% |
Explicitメモリーブロックの自動解放処理で解放されたオブジェクトの割合(オブジェクト解放率)が%表記で出力されます。 オブジェクト解放率=(自動解放処理前のクラスのオブジェクト数-自動解放処理後のクラスのオブジェクト数)/自動解放処理前のクラスのオブジェクト数×100 なお、オブジェクト解放率情報出力時に、自動解放処理の対象とならなかったExplicitメモリーブロックには、「−」が出力されます。 |
- (凡例)
-
<const>K:正の自然数を表します。
<decimal>K:正の整数(小数点第1位まで)を表します。
<ptr>K:ポインター値を表します。
<letters>K:任意の文字または任意の文字列を表します。
- 注※1
-
オブジェクト統計情報は、eheapprofコマンドを実行している場合に出力されます。なお、オブジェクト統計情報には、実際に作成したサイズ、個数よりも多く、int型配列を示す"[I"が出力されることがあります。この場合、"[I"は、Explicitメモリーブロック内で使用されていないオブジェクトを示します。Explicitメモリーブロック内で使用されていないオブジェクトは、Java VMの内部処理でint型配列化されます。
- 注※2
-
オブジェクト解放率情報は、-freeratioオプションを指定したeheapprofコマンドを実行している場合に出力されます。
出力例
「Explicitメモリーブロック内のオブジェクト統計情報」および「Explicitメモリーブロックのオブジェクト解放率情報」が無効な場合
Explicit Heap Status -------------------- max 31415926K, total 213971K, used 205369K, garbage 1234K (1.1% used/max, 96.2% used/total, 0.0% garbage/used), 3 spaces exist Explicit Memories(0x12345678) "EJBMgrData" eid=1(0x02f25610)/R, total 154272K, used 150176K, garbage 1234K (97.0% used/total, 1.2% garbage/used, 0 blocks) Enable "VJBStored" eid=3(0x02f25910)/B, total 54272K, used 50176K, garbage 0K (90.9% used/total, 0.0% garbage/used, 2 blocks) Enable "ExplicitMemory-2" eid=2(0x02f25700)/R, total 5427K, used 5017K, garbage 0K (92.1% used/total, 0.0% garbage/used, 0 blocks) Enable
「Explicitメモリーブロック内のオブジェクト統計情報」および「Explicitメモリーブロックのオブジェクト解放率情報」が有効な場合
Explicit Heap Status -------------------- max 31415926K, total 162816K, used 150528K, garbage 10004K (0.0% used/max, 91.1% used/total, 6.6% garbage/used), 3 spaces exist Explicit Memories(0x12345678) "EJBMgrData" eid=1(0x02f25610)/R, total 54272K, used 50176K, garbage 0K (91.2% used/total, 0.0% garbage/used, 0 blocks) deployed objects ________________Size__Instances__FreeRatio__Class________________ 35234568 10648 - java.util.HashMap 5678900 10668 - [Ljava.util.HashMap$Entry; 4456788 7436 - java.util.HashMap$Entry 4321000 200 - java.util.WeakHashMap 1234568 190 - [Ljava.util.WeakHashMap$Entry; 454400 4 - java.util.WeakHashMap$Entry 51380224 29146 total "VJBStored" eid=3(0x02f25910)/B, total 54272K, used 50176K, garbage 10004K (90.7% used/total, 19.9% garbage/used, 5 blocks) deployed objects ________________Size__Instances__FreeRatio__Class________________ 35234568 10648 49 java.util.HashMap 5678900 10668 43 [Ljava.util.HashMap$Entry; 4456788 7436 50 java.util.HashMap$Entry 4321000 200 32 java.util.WeakHashMap 1234568 190 45 [Ljava.util.WeakHashMap$Entry; 454400 4 22 java.util.WeakHashMap$Entry 51380224 29146 total "ExplicitMemory-2" eid=2(0x02f25700)/B, total 54272K, used 50176K, garbage 0K (91.1% used/total, 0.0% garbage/used, 0 blocks) deployed objects ________________Size__Instances__FreeRatio__Class________________ 35234568 10648 - java.util.HashMap 5678900 10668 - [Ljava.util.HashMap$Entry; 4456788 7436 - java.util.HashMap$Entry 4321000 200 - java.util.WeakHashMap 1234568 190 - [Ljava.util.WeakHashMap$Entry; 454400 4 - java.util.WeakHashMap$Entry 51380224 29146 total
戻り値
戻り値 |
説明 |
---|---|
0 |
正常終了しました。 |
1 |
異常終了しました。 |
2 |
一定時間内にExplicitヒープ詳細情報を含んだ拡張スレッドダンプ出力処理終了の応答がありませんでした。 |
出力メッセージ
次のエラーメッセージまたは警告メッセージが出力された場合、Explicitヒープ詳細情報付き拡張スレッドダンプは出力されません。
項番 |
エラーメッセージ |
説明 |
---|---|---|
1 |
usage: eheapprof [-f|-i] [-freeratio] -p process-id |
eheapprofコマンドへの引数の指定が間違っています。 |
2 |
eheapprof: illegal option -- オプション |
eheapprofコマンドに指定したオプションが不正です。 |
3 |
プロセスID: Now processing previous request, this request canceled |
eheapprofコマンドの引数に指定したプロセスIDに該当するプロセスが、現在Explicitヒープ詳細情報を出力しています。 |
4 |
プロセスID: Not owner |
eheapprofコマンドの引数に指定したプロセスIDに0が指定されています。 |
5 |
eheapprof: can't create work file at temporary directory , this request canceled |
一時ファイル用ディレクトリーに参照・書き込み権限がない場合、Explicitヒープ詳細情報付き拡張スレッドダンプを出力できません。Explicitヒープ詳細情報付き拡張スレッドダンプの出力要求はキャンセルされます。 |
6 |
eheapprof: can't get temporary directory, this request canceled |
一時ファイル用ディレクトリーが取り出せない場合、Explicitヒープ詳細情報付き拡張スレッドダンプを出力できません。Explicitヒープ詳細情報付き拡張スレッドダンプの出力要求はキャンセルされます。 |
7 |
eheapprof: please delete 削除できなかったファイル名 in 削除できなかったファイルの絶対パス |
eheapprofコマンドを終了したときに、内部ファイルを削除できませんでした。削除できなかったファイルの絶対パスにある、削除できなかったファイルを削除してください。 |
8 |
eheapprof: unexpected error occurred: エラー原因 |
eheapprofコマンド実行中に予期しないエラーが発生しました。エラー原因には、例えば下記のような表示がされます。
|
9 |
eheapprof: can't communicate with process プロセスID |
eheapprofコマンドの引数に指定したプロセスIDに該当するプロセスに問題があり、通信処理でエラーが発生しているため通信できません。または、eheapprofコマンドの引数に指定したプロセスIDに該当するプロセスがありません。 |
10 |
プロセスID: Timeout occurred. Java process not responding |
eheapprofコマンドの引数に指定したプロセスIDに該当するプロセスから、一定時間内にExplicitヒープ詳細情報出力処理終了の応答がありませんでした。 |
注意事項
-
eheapprofコマンドはプログラムの開発用ユーティリティーとして提供されているものです。システムの運用では使用しないでください。
-
同じjavaプロセスに対して、同時にeheapprofコマンドは実行できません。前回のeheapprofコマンドによるExplicitヒープ詳細情報が拡張スレッドダンプに出力されたあとに実行してください。
-
Javaプロセスは起動時にMailSlotを使った通信の初期化処理を実行します。初期化に失敗した場合、メッセージを出力して処理を中断します。
-
このコマンドは、Windows APIのGetTempPath()関数で得られるディレクトリーに一時ファイルを作成します。このコマンドを正常に動作させるためには、このディレクトリーに書き込み権限が必要です。また、Java VMプロセス起動中はこのディレクトリーを削除しないでください。なお、このディレクトリーにWindowsのシステムディレクトリーを指定しないでください。