Hitachi

 Hitachi Application Server V10 コマンドリファレンスWindows®用)


4.2.3 javacore

スレッドダンプの取得

書式

javacore [-i|-f] -p プロセスID

格納先

Application Serverインストールディレクトリー\jdk\jre\bin\

機能

コマンド実行時のスレッドダンプを取得します。

実行権限

引数のプロセスIDで指定するjavaプロセスと同一のユーザーで実行してください。

環境変数

ファイルの出力先を変更する場合、JAVACOREDIRに出力先を指定します。

引数

-i

スレッドダンプの出力処理の実行を確認するメッセージが表示されます。表示されたメッセージに対してyまたはnを入力します。このとき、yを入力するとスレッドダンプが出力されます。nを入力すると、何も出力しないで処理を終了します。省略した場合、-fオプションが指定されないかぎり、このオプションは有効です。

-f

-iオプションを無効にします。省略した場合、-iオプションが有効になります。

-p プロセスID

プロセスIDには、スレッドダンプを取得するjavaプログラムのプロセスIDを指定します。

型:Integer

指定できる値を次に示します。

  • 04294967295

出力形式

ヘッダー
EEE MMM dd hh:mm:ss yyyy
 
Full thread dump Java HotSpot(TM) Client VM (1.5.0_05-b05-CDK0850-ビルド日
 mixed mode)
起動コマンドライン
注※

EEEは曜日、MMMは月、ddは日を表します。また、hhは時間、mmは分、ssは秒、yyyyは年(西暦)を表します。

システム設定
System Properties
-----------------
Java Home Dir  : JDK実行環境インストールディレクトリー
Java DLL Dir   : JDKを構成するライブラリーのインストールディレクトリー
Sys Classpath  : システムクラスパス
User Args      :
Javaコマンドオプション1
Javaコマンドオプション2
動作環境
Operating Environment
---------------------
Host    : ホスト名:IPアドレス
OS      : OSバージョン
CPU     : CPU種別, 利用可能CPU数/システム全体のCPU数
メモリー情報
Memory Status
-------------
  Memory in use   : メモリー使用状況(単位:パーセント)
  Physical memory : 物理メモリー使用量 free
  Virtual memory  : 仮想メモリー使用量 free
  Paging file     : ページング使用量 free
注※

利用可能サイズ/総サイズ の形式で表示されます(単位:バイト)。

Javaヒープ情報

SerialGCの場合

Heap Status
-----------
def new generation   max max size, total capacity, used size (max usage% used/max, total usage% used/total)
                      [bottom, commit addr, reserve addr)
  eden space capacity,  usage% used [bottom, top, reserve addr)
  from space capacity,   usage% used [bottom, top, reserve addr)
  to   space capacity,   usage% used [bottom, top, reserve addr)
tenured generation   max max size, total capacity, used size (max usage% used/max, total usage% used/total)
                      [bottom, commit addr, reserve addr)
   the space capacity,  usage% used [bottom, top, used block, reserve addr)
Metaspace       max max size, capacity capacity words, committed committed size, reserved reserve size, used size (max usage% used/max, total usage% used/committed)
  class space    max max size, capacity capacity words, committed committed size, reserved reserve size, used size (max usage% used/max, total usage% used/committed)
                [bottom, top, commit addr, reserve addr)
max size

最大の容量。単位はキロバイト。

Metaspaceの場合、-XX:MaxMetaspaceSizeが未指定のとき最大値は無制限のため、"unlimited"が出力されます。

capacity

現在の容量。単位はキロバイト。

capacity words

Metaspaceのコミット済みのメモリー領域からフリー領域を除いた合計サイズ。単位はキロバイト。

committed size

Metaspaceのコミット済みの合計メモリーサイズ。単位はキロバイト。

reserve size

予約済みのメモリーサイズ。単位はキロバイト。

size

使用中のメモリーサイズ。単位はキロバイト。

max usage

最大の容量に対する使用率。

Metaspaceの場合、-XX:MaxMetaspaceSizeが未指定のとき最大値は無制限のため、"-%"が出力されます。

total usage

現在の容量に対する使用率。

bottom

領域先頭アドレス。

top

使用中領域の先頭アドレス。

commit addr

コミット済み領域の末尾アドレス。

reserve addr

予約済み領域の末尾アドレス。

usage

使用率。

used block

次の空きブロックの先頭アドレス。

class spaceは、64bit版のJava VMで圧縮オブジェクトポインター機能が有効であり、かつCompressed Class Spaceを使用している場合にだけ出力されます。

Metaspaceの値は、class spaceを含んだMetaspace全体の合計値です。

G1GCの場合

Heap Status
-----------
 garbage-first heap   total heap capacity, used heap size [heap bottom, heap commit addr, heap reserve addr)
  region size region size, young region young (young size), survivor region survivors (survivor size)
 Metaspace       max max size, capacity capacity words, committed committed size, reserved reserve size, used size (max usage% used/max, total usage% used/committed)
  class space    max max size, capacity capacity words, committed committed size, reserved reserve size, used size (max usage% used/max, total usage% used/committed)
                [bottom, top, commit addr, reserve addr)

出力項目の詳細フォーマット

出力項目

出力内容

意味

heap capacity

<const>K

Javaヒープ領域の領域サイズ。単位はキロバイト。

(a)の合計サイズ+(b)の合計サイズ+(c)の合計サイズ+(d)の合計サイズ

heap size

<const>K

Javaヒープ領域の使用サイズ。単位はキロバイト。

(a)の合計サイズ+(b)の合計サイズ+(c)の合計サイズ

heap bottom

<ptr64>

Javaヒープ領域の先頭アドレス。

heap commit addr

<ptr64>

Javaヒープ領域のコミット済みの末尾アドレス。

heap reserve addr

<ptr64>

Javaヒープ領域の予約済みの末尾アドレス。

region size

<const>K

1リージョンのサイズ。単位はキロバイト。

young region

<const>

New領域の使用中のリージョン数。

(a)のリージョン数+(b)のリージョン数

young size

<const>K

New領域の使用サイズ。単位はキロバイト。

((a)のリージョン数+(b)のリージョン数)*region_size

survivor region

<const>

Survivor領域の使用中のリージョン数。

(b)のリージョン数

survivor size

<const>K

Survivor領域の使用サイズ。単位はキロバイト。

(b)のリージョン数*region_size

Metaspace、class spaceの出力項目はSerial GCの場合と同じです。「Serial GCの場合」の説明を参照してください。

(凡例)

(a):Eden領域

(b):Survivor領域

(c):Tenured領域

(d):Free領域

Java VM内部メモリーマップ情報
JVM Internal Memory Map
-----------------------
メモリー確保関数:address = 開始アドレス - 終了アドレス (size:サイズ)

メモリー確保関数:mmap()かmalloc()のどちらかが出力されます。

開始アドレス:メモリー領域の開始アドレスが16進で出力されます。

終了アドレス:メモリー領域の終了アドレスが16進で出力されます。

サイズ:確保しているメモリー領域のサイズが出力されます(単位:バイト)。

Java VM内部メモリーサイズ情報
JVM Internal Memory Status
--------------------------
  Heap Size      :確保しているメモリーサイズ
  Alloc Size     :使用中のメモリーサイズ
  Free Size      :未使用のメモリーサイズ
注※

単位:バイト

アプリケーション情報
Application Environment
-----------------------
Signal Handlers -
  SIGINT         :シグナルハンドラー情報
  SIGILL         :シグナルハンドラー情報
…
  SIGBREAK       :シグナルハンドラー情報
  SIGABRT        :シグナルハンドラー情報
 
Environment Variables -
環境変数=
…
Current Directory -

C:\Program Files\Hitachi\...
ライブラリー情報
Loaded Libraries
----------------
Dynamic libraries :
開始アドレス-終了アドレス   コマンド
開始アドレス-終了アドレス   ライブラリー
スレッド情報
----------- 
"スレッド名" daemon prio=優先度 jid=ハッシュ値 tid=スレッドID
    nid=nativeID status [開始アドレス...終了アドレス]
    java.lang.Thread.State: スレッドの現在のステータス※
    stack=[スタック開始アドレス..YellowPageアドレス..RedPageアドレス..
    スタック終了アドレス]
    [user cpu time=ユーザー時間ms, kernel cpu time=カーネル時間ms]
    [blocked count=ブロック回数, waited count=待機回数]
         at クラス名.メソッド名(メソッド情報)
…

注※

スレッドの現在のステータスの情報は、JDK 6がベースの場合で、バージョンが08-10以降のときにだけ出力されます。

出力内容を説明します。

スレッド名

Threadクラスのコンストラクターに指定されたスレッド名称が出力されます。

daemon:デーモンスレッドである場合に、"daemon"と出力されます。

優先度:Thread#setPriorityで設定された優先度が出力されます。

ハッシュ値:System.identityHashCode()を呼び出して得られる値と同一の値が8桁の16進数で出力されます。

スレッドID:スレッドオブジェクトのメモリー上のアドレス。

nativeID:OSレベルのスレッドID。

status:スレッドの状態。

runnable:実行中または実行可能なスレッド

in Object.wait()、waiting for monitor entryまたはwaiting on condition:モニターロック待ちのスレッド

sleeping:中断状態のスレッド

開始アドレス:Javaフレームの最高位スタックアドレスが16進数で出力されます。

終了アドレス:JavaLockのある最高位スタックアドレスが16進数で出力されます。

ユーザー時間:スレッド開始からのユーザー時間がミリ秒単位で出力されます。

カーネル時間:スレッド開始からのカーネル時間がミリ秒単位で出力されます。

ブロック回数:スレッド開始から、処理がブロックされた回数が出力されます。

待機回数:スレッド開始から、処理が待ち状態になった回数が出力されます。

スレッドの現在のステータス

スレッドの現在のステータスを表すメッセージが出力されます。メッセージの内容はjava.lang.Thread.State列挙型に対応します。

スタック開始アドレス

スタック開始アドレスが16進数で出力されます。

YellowPageアドレス

スタックYellowガードページ先頭アドレスが16進数で出力されます。

RedPageアドレス

スタックRedガードページ先頭アドレスが16進数で出力されます。

スタック終了アドレス

スタック終了アドレスが16進数で出力されます。

クラス名

クラス名が出力されます。

メソッド名

メソッド名が出力されます。

メソッド情報

次のメソッド情報が出力されます。

Native Method

ネイティブメソッドの場合に出力されます。

ファイル名:行番号

Javaメソッドで行番号付きでコンパイルされている場合に出力されます。

Unknown Source

Javaメソッドで行番号なしでコンパイルされている場合に出力されます。

Javaモニターダンプ
Java monitor
------------
ロックオブジェクト@ハッシュコード オーナー情報
   待機状態:待機スレッド数
      待機スレッド情報

出力内容を説明します。

ロックオブジェクト

ロック対象オブジェクトのクラス名が出力されます。

ハッシュコード

Object.hashCodeで得られるハッシュコードが出力されます。

オーナー情報

owner "スレッド名"スレッドID:オーナーがある場合に出力されます。

no owner:オーナーがない場合に出力されます。

待機状態

... waiting to enter:メソッド実行待ちの場合に出力されます。

... waiting to be notified:通知待ちの場合に出力されます。

待機スレッド数

スレッド数が出力されます。

待機スレッド情報

「"スレッド名" スレッドID」の形式で出力されます。

JNIグローバル参照数の情報
JNI Information
---------------
JNI global references: JNIグローバル参照数

出力内容を説明します。

JNIグローバル参照数

Java VMが保持しているグローバル参照の数が出力されます。

JNIグローバル参照はJava VMの内部でも再利用されるため、JNIがサポートするDeleteGlobalRef関数を発行してJNIグローバル参照を削除しても、数値は減少しません。また、NewGlobalRef関数を発行してJNIグローバル参照を新規作成しても、Java VMが再利用したJNIグローバル参照を割り当てた場合は数値は増加しません。

Explicitヒープ情報および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
...

注意事項を次に示します。

  • Explicitヒープ情報とExplicitメモリーブロック情報の間には、空行が1行あります。

  • Explicitメモリーブロック情報の出力順序(どのExplicitメモリーブロックから出力するか)は未定義とします。

  • "EM_NAME"の前には、半角2文字分のスペースがあります。

  • 最後の行には空行が1行あります。したがって、Explicitメモリーブロックごとの出力の間には空行が1行あります。

フッター
Full thread dump completed.   EEE MMM dd hh:mm:ss yyyy
注※

EEEは曜日、MMMは月、ddは日を表します。また、hhは時間、mmは分、ssは秒、yyyyは年(西暦)を表します。

拡張スレッドダンプ情報との比較を、次に示します。

出力情報

標準スレッドダンプ

拡張スレッドダンプ

ヘッダー

×

システム設定

×

動作環境

×

メモリー情報(Windowsの場合だけ)

×

Javaヒープ情報

×

Java VM内部メモリーマップ情報

×

Java VM内部メモリーサイズ情報

×

アプリケーション環境

×

ライブラリー情報

×

スレッド情報

※1

Javaモニターダンプ

×

フッター

×

スレッドダンプ出力先

標準出力

標準出力※2

Java VMログファイル

(凡例)

○:出力されます。

×:出力されません。

注※1

スタックの開始および終了のアドレス情報などが出力されます。

注※2

-XX:+HitachiThreadDumpToStdoutオプションが指定された場合に出力されます。

入力例

  1. -fオプションを省略してjavacoreコマンドを実行します。

    % javacore -p 8326

  2. スレッドダンプの出力処理の実行を確認するメッセージが表示されます。

    Output a thread dump:?(y/n)

  3. スレッドダンプを出力する場合はyを、出力しない場合はnを入力します。

    Output a thread dump:?(y/n)y

  4. 実行中のjavaプログラムは、カレントディレクトリーに次のファイルを作成し、プログラムを継続します。

    • スレッドダンプ

      javacoreプロセスID.日時.txt

戻り値

戻り値

説明

0

正常終了しました。

1

異常終了しました。

2

一定時間内にcore生成処理終了の応答がありませんでした。

出力メッセージ

次のエラーメッセージまたは警告メッセージを出力した場合、スレッドダンプは取得されません。

項番

エラーメッセージ

説明

1

usage: javacore [-f|-i] [-force] -p process-id

コマンドの引数が不正です。

2

javacore: illegal option --オプション

コマンドの引数に指定したオプションが不正です。

3

javacore: can't communicate with process プロセスID.

引数に指定したプロセスIDに問題があるため、通信できません。または、引数に指定したプロセスIDに該当するプロセスが存在しません。

4

プロセスID: Not owner

コマンドの引数に指定したプロセスIDに0が指定されています。

5

プロセスID: Now processing previous request, this request canceled

コマンドの引数に指定したプロセスIDのプロセスがすでに処理中です。

6

javacore: can't create work file at temporary directory, this request canceled

一時ファイル用ディレクトリーに参照および書き込み権限がありません。

7

javacore: can't get temporary directory, this request canceled

GetTempPath()APIがエラーリターンしたため、一時ファイル用ディレクトリーが取り出せません。

8

javacore: unexpected error occurred: エラー原因

コマンド実行中に予期しないエラーが発生しました。

9

プロセスID: Timeout occurred. Java process not responding.

コマンドの引数に指定したプロセスIDに該当するプロセスから、一定時間内にスレッドダンプ出力処理終了の応答がありませんでした。

10

javacore: please delete 削除できなかったファイル名 in 削除できなかったファイルの絶対パス.

コマンド終了時にjavacoreコマンドの内部処理で作成したファイルを削除できませんでした。削除できなかったファイルの絶対パスにある、削除できなかったファイルを削除してください。

注意事項