Hitachi

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


4.2.4 javagc

GCの強制発生

書式

javagc [-i|-f] [-v] [-s] [-ehgc] -p プロセスID

格納先

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

機能

メモリーリーク、システム障害およびアプリケーションのデバッグのために、プロセスIDがプロセスIDのjavaプロセスに対して、任意のタイミングでFullGCを発生させます。また、プロセスIDがプロセスIDのjavaプロセスに対して、任意のタイミングでFullGCと、Explicitメモリーブロックの解放を実行します。

javaプロセスとの通信にはSIGQUITシグナルを使用します。コマンドを実行すると、コマンドの処理内容をユーザーに確認します。n(発生させない、実行しない、または送信しない)と回答した場合には、コマンドの処理は実行されません(戻り値が1となります)。この確認動作は、-fオプションを指定することで省略できます。

プロセスIDのjavaプロセスが通常の要因で発生するCopyGCやFullGCを実行中の場合は、その終了を待ってからコマンドを実行します。

実行権限

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

引数

-i

次に示すコマンドの処理内容をユーザーに確認します。

  • プロセスIDのプロセスに対して、GCを発生させるかどうか

  • プロセスIDのプロセスに対して、Explicitメモリーブロックの解放を実行するかどうか

このオプションより前に指定した、-fオプションを無効にします。

-f

次に示すコマンドの処理内容をユーザーに確認しません。

  • プロセスIDのプロセスに対して、GCを発生させるかどうか

  • Explicitメモリーブロックの解放を実行するかどうか

このオプションより前に指定した、-iオプションを無効にします。

-v

-XX:+HitachiVerboseGCオプションの指定がなくても、Java VMログファイル作成の規則に従ってJava VMログファイルを作成して、拡張verbosegc情報を出力します。

その際、次のオプション値も反映した内容の拡張verbosegc情報を出力します。

  • -XX:+HitachiVerboseGCPrintDate

  • -XX:+HitachiVerboseGCPrintCause

  • -XX:+HitachiVerboseGCCpuTime

  • -XX:+HitachiCommaVerboseGC

-s

標準出力に拡張verbosegc情報を出力します。

その際、次のオプション値も反映した内容の拡張verbosegc情報を出力します。

  • -XX:+HitachiVerboseGCPrintDate

  • -XX:+HitachiVerboseGCPrintCause

  • -XX:+HitachiVerboseGCCpuTime

  • -XX:+HitachiCommaVerboseGC

-ehgc

プロセスIDがプロセスIDのjavaプロセスに対して、FullGCと、Explicitメモリーブロックの解放を実行します。

自動解放機能が有効な場合の解放処理で解放されなかったExplicitメモリーブロックを、明示的に解放できます。

まず、Java VMによってFullGCが実行され、拡張verbosegc情報にGCの要因として「EMJavaGC Command」が出力されます。そのあと、次に示すExplicitメモリーブロックが解放されます。

  • 明示管理ヒープ機能の自動解放機能が有効な場合に、明示解放予約によって予約されたExplicitメモリーブロック

  • 明示管理ヒープ自動配置設定ファイル、またはJava VMで生成されたExplicitメモリーブロック

  • 前回の解放処理で解放されなかったExplicitメモリーブロック

また、次の場合は、解放処理が実行されません。

  • 最大数の制限を超えてExplicitメモリーブロックを解放しようとした場合

    現存するExplicitメモリーブロックの数が1,048,575個の場合が該当します。

  • 明示管理ヒープ機能がオフになっている場合

    -XX:-HitachiUseExplicitMemoryオプションが指定されている場合が該当します。

この場合、コンストラクターの実行は成功しますが、無効なExplicitメモリーブロック(ExplicitMemoryインスタンス)として扱われます。

javagcコマンドによるExplicitメモリーブロックの解放処理では、FullGCが実行されます。このため、動作中のアプリケーションに対する処理には適していません。アプリケーションのアンデプロイ時や夜間など、アプリケーションが動作していない時間帯に実行することをお勧めします。

-p プロセスID

FullGCや、Explicitメモリーブロックの解放を実行したいプロセスIDを指定します。

型:Integer

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

  • 04294967295

出力形式(SerialGCの場合)

オプション"v"または"s"を指定した場合はJava VMログを出力します。

[id] <date> (Skip Full:full_count, Copy:copy_count) [gc_kind gc_info, gc_time secs][Eden: eden_info][Survivor: survivor_info][Tenured: tenured_info][Metaspace: Metaspace_info][class space: class_space_info] [cause:cause_info] [User: user_cpu secs][Sys: system_cpu secs][IM: jvm_alloc_size, mmap_total_size, malloc_total_size][TC: thread_count][DOE: doe_alloc_size, called_count][CCI: cc_used_sizeK, cc_max_sizeK, cc_infoK]

出力内容を次に説明します。

id

Java VMログファイル識別子。

date

GC開始日時。

-XX:-HitachiVerboseGCPrintDateオプションが指定された場合、出力されません。

full_count

full GC情報出力をスキップした回数。

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

copy_count

copy GC情報出力をスキップした回数。

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

gc_kind

GC種別。「FullGC」または「GC」が出力されます。

gc_info

GC情報。次の形式で出力されます。

GC前の領域長 -> GC後の領域長 (領域サイズ)

gc_time

GC経過時間。

Eden

エデンの種別。「DefNew::Eden」が出力されます。

eden_info

Eden情報。次の形式で出力されます。

GC前の領域長 -> GC後の領域長 (領域サイズ)

Survivor

Survivorの種別。「DefNew:: Survivor」が出力されます。

survivor_info

Survivor情報。次の形式で出力されます。

GC前の領域長 -> GC後の領域長 (領域サイズ)

Tenured

Tenuredの種別。「Tenured」が出力されます。

tenured_info

Tenured情報。次の形式で出力されます。

GC前の領域長 -> GC後の領域長 (領域サイズ)

Metaspace_info

Metaspace領域のメモリー情報。次の形式で出力されます。単位はキロバイトです。

<const1>K(<const2>K, <const3>K)-><const4>K(<const5>K, <const6>K)]

  • <const1>: GC前のMetaspace領域の使用サイズ

  • <const2>: GC前のMetaspace領域のcapacity サイズ

  • <const3>: GC前のMetaspace領域のcommit サイズ

  • <const4>: GC後のMetaspace領域の使用サイズ

  • <const5>: GC後のMetaspace領域のcapacity サイズ

  • <const6>: GC後のMetaspace領域のcommit サイズ

class_space_info

class space領域のメモリー情報。次の形式で出力されます。単位はキロバイトです。

圧縮オブジェクトポインタ機能が無効の場合、出力されません。

<const1>K(<const2>K, <const3>K)-><const4>K(<const5>K, <const6>K)]

  • <const1>: GC前のclass space領域の使用サイズ

  • <const2>: GC前のclass space領域のcapacity サイズ

  • <const3>: GC前のclass space領域のcommit サイズ

  • <const4>: GC後のclass space領域の使用サイズ

  • <const5>: GC後のclass space領域のcapacity サイズ

  • <const6>: GC後のclass space領域のcommit サイズ

cause_info

GC要因内容。

-XX:-HitachiVerboseGCPrintCauseオプションが指定された場合、出力されません。

user_cpu

GCスレッドがユーザーモードで費やしたCPU時間。単位は秒です。

CPU時間取得に失敗した場合、[User: unknown]のように、「unknown」と表示されます。

-XX:-HitachiVerboseGCCpuTimeオプションが指定された場合、出力されません。

system_cpu

GCスレッドがカーネルモードで費やしたCPU時間。単位は秒です。

CPU時間取得に失敗した場合、[Sys: unknown]のように、「unknown」と表示されます。

-XX:-HitachiVerboseGCCpuTimeオプションが指定された場合、出力されません。

jvm_alloc_size

Java VM内部で管理している領域のうち、現在使用中の領域のサイズ(mmap_total_sizemalloc_total_sizeの合計サイズのうち、現在使用中の領域のサイズ)。

-XX:-HitachiVerboseGCPrintJVMInternalMemoryオプションが指定された場合、出力されません。

mmap_total_size

Java VM内部で管理している領域のうち、mmap(Windowsの場合はVirtualAlloc)で割り当てたCヒープの総サイズ。

-XX:-HitachiVerboseGCPrintJVMInternalMemoryオプションが指定された場合、出力されません。

malloc_total_size

Java VM内部で管理している領域のうち、mallocで割り当てたCヒープの総サイズ。

-XX:-HitachiVerboseGCPrintJVMInternalMemoryオプションが指定された場合、出力されません。

thread_count

Javaスレッドの数。

-XX:-HitachiVerboseGCPrintThreadCountオプションが指定された場合、出力されません。

doe_alloc_size

java.io.File.deleteOnExit()を呼び出して確保した累積のヒープサイズ。

-XX:-HitachiVerboseGCPrintDeleteOnExitオプションが指定された場合、出力されません。

called_count

java.io.File.deleteOnExit()の呼び出し回数。

-XX:-HitachiVerboseGCPrintDeleteOnExitオプションが指定された場合、出力されません。

cc_used_size

GC発生時のコードキャッシュ領域の使用サイズ。単位はキロバイトです。

-XX:-PrintCodeCacheInfoオプションが指定された場合、出力されません。

cc_max_size

コードキャッシュ領域の最大サイズ。単位はキロバイトです。

-XX:-PrintCodeCacheInfoオプションが指定された場合、出力されません。

cc_info

保守情報。

-XX:-PrintCodeCacheInfoオプションが指定された場合、出力されません。

出力形式(G1GCの場合)

オプション"v"または"s"を指定した場合はJava VMログを出力します。

G1GCでは、Java VMログファイルにGCに関するログ(以降、VG1ログ)とConcurrent Marking(以降、CM)に関するログ(以降、VCMログ)を出力します。CMはアプリケーションと並行で処理するため、1回のCMのログは複数行に分かれて出力されます。

VG1 ログ、VCMログの出力フォーマットの詳細を次に示します。

VG1 ログ

[id]<date>[gc_kind gc_info, gc_time secs][Status:gc_status][G1GC::Eden: eden_info][G1GC::Survivor: survivor_info][G1GC::Tenured: tenured_info][G1GC::Humongous: humongous_info][G1GC::Free: free_info][Metaspace: Metaspace_info][class space: class_space_info] [cause:cause_info][RegionSize: region_sizeK][Target: target_time secs][Predicted: predicted_time secs][TargetTenured: target_sizeK][Reclaimable: reclaimable_info][User: user_cpu secs][Sys: system_cpu secs][IM: jvm_alloc_sizeK, mmap_total_sizeK, malloc_total_sizeK][TC: thread_count][DOE: doe_alloc_sizeK, called_count][CCI: cc_used_sizeK, cc_max_sizeK, cc_infoK]

注 改行や、項目間のスペースはありません。

出力項目

出力内容

意味

id

VG1

Java VMログファイル識別子。G1GC のGCログでは「[VG1]」が出力されます。

date

<letters>

GCまたはCMが開始された日時。-XX:-HitachiVerboseGCPrintDate指定時は出力されません。

gc_kind

Full GC| Mixed GC|Young GC |Young GC(initial-mark)|CM Remark|CM Cleanup

GCまたはCMの種別。

gc_info

<const1>K/<const2>K(<const3>K)-><const4>K/<const5>K(<const6>K)

Javaヒープ領域のメモリー情報。

<const1>:GC前のJavaヒープ領域の使用サイズ。

<const2>:GC前のJavaヒープ領域の使用サイズ(リージョン換算)※1

<const3>:GC前のJavaヒープ領域の領域サイズ(リージョン換算)。

<const4>:GC後のJavaヒープ領域の使用サイズ。

<const5>:GC後のJavaヒープ領域の使用サイズ(リージョン換算)。

<const6>:GC後のJavaヒープ領域の領域サイズ(リージョン換算)。

単位はキロバイト。

gc_time

<time>

GCによるアプリケーション停止時間。

単位は秒。

gc_status

-|to exhausted

GCの状態。

  • To領域あふれが発生した場合、「to exhausted」が出力されます。

  • 上記の状態以外の場合、「-」が出力されます。

各GCで出力される状態を以下に示します。

gc_kindがYoung GCまたはYoung GC(initial-mark)またはMixed GCの場合:「-」または「to exhausted」が出力されます。

gc_kindが上記以外の場合: 「-」が出力されます。

eden_info

<const1>K(<const2>K)-><const3>K(<const4>K)

Eden領域のメモリー情報。

<const1>:GC前のEden領域の使用サイズ(リージョン換算)。

<const2>:GC前のEden領域が取り得る最大の領域サイズ(リージョン換算)※2

<const3>:GC後のEden領域の使用サイズ(リージョン換算)。

<const4>:GC後のEden領域が取り得る最大の領域サイズ(リージョン換算)※2

単位はキロバイト。

survivor_info

<const1>K-><const2>K

Survivor領域のメモリー情報。

<const1>:GC前のSurvivor領域の使用サイズ(リージョン換算)。

<const2>:GC後のSurvivor領域の使用サイズ(リージョン換算)。

単位はキロバイト。

tenured_info

<const1>K-><const2>K

Tenured領域のメモリー情報。

<const1>: GC前のTenured領域の使用サイズ(リージョン換算)。

<const2>: GC後のTenured領域の使用サイズ(リージョン換算)。

単位はキロバイト。

humongous_info

<const1>K-><const2>K

Humongous領域のメモリー情報。

<const1>: GC前のHumongous領域の使用サイズ(リージョン換算)。

<const2>: GC後のHumongous領域の使用サイズ(リージョン換算)。

単位はキロバイト。

free_info

<const1>K-><const2>K

Free領域のメモリー情報。

<const1>: GC前のFree領域の使用サイズ(リージョン換算)。

<const2>: GC後のFree領域の使用サイズ(リージョン換算)。

単位はキロバイト。

Metaspace_info

<const1>K(<const2>K, <const3>K)-><const4>K(<const5>K, <const6>K)]

Metaspace領域のメモリー情報。

  • <const1>: GC前のMetaspace領域の使用サイズ

  • <const2>: GC前のMetaspace領域のcapacity サイズ

  • <const3>: GC前のMetaspace領域のcommit サイズ

  • <const4>: GC後のMetaspace領域の使用サイズ

  • <const5>: GC後のMetaspace領域のcapacity サイズ

  • <const6>: GC後のMetaspace領域のcommit サイズ

単位はキロバイト。

class_space_info

<const1>K(<const2>K, <const3>K)-><const4>K(<const5>K, <const6>K)]

class space領域のメモリー情報。

圧縮オブジェクトポインタ機能が無効の場合、出力されません。

  • <const1>: GC前のclass space領域の使用サイズ

  • <const2>: GC前のclass space領域のcapacity サイズ

  • <const3>: GC前のclass space領域のcommit サイズ

  • <const4>: GC後のclass space領域の使用サイズ

  • <const5>: GC後のclass space領域のcapacity サイズ

  • <const6>: GC後のclass space領域のcommit サイズ

単位はキロバイト。

cause_info

<letters>

GC要因内容。

-XX:-HitachiVerboseGCPrintCause指定時は出力されません。

region_size

<const>

1リージョンのサイズ。

単位はキロバイト。

target_time

<time>

GCによるアプリケーション停止時間の目標時間。

単位は秒。

predicted_time

<time>

Java VMが予測したGCによるアプリケーション停止時間。

単位は秒。

GC 種別が「Full GC」、「CM Remark」または「CM Cleanup」の場合、予測を行わないため、0が出力されます。

target_size

<const>

Mixed GCでGC対象となったTenured領域のサイズ。

単位はキロバイト。

GC種別が「Mixed GC」以外の場合は0が出力されます。

reclaimable_info

<const1>K(<const2>.<digit><digit>%)

予測回収サイズ情報。

<const1>:予測回収サイズ。

単位はキロバイト。

<const2>.<digit><digit>:予測回収率(小数第2位まで)

なお、予測回収サイズ情報は、CM終了直後のYoung GCまたはMixed GCだけが出力されます。それ以外の場合、予測を行わないため、0が出力されます。

user_cpu

<time>

全GCスレッドがユーザーモードで費やしたCPU時間の合計。

単位は秒。

-XX:-HitachiVerboseGCCpuTime指定時は出力されません。

CPU 時間取得に失敗した場合には「unknown」と表示します:[User: unknown]

system_cpu

<time>

全GCスレッドがカーネルモードで費やしたCPU時間の合計。

単位は秒。

-XX:-HitachiVerboseGCCpuTime指定時は出力されません。

CPU 時間取得に失敗した場合には「unknown」と表示します:[Sys: unknown]

注※1 リージョン換算は、領域のサイズを1リージョンのサイズで切り上げ、1リージョンのサイズの倍数で表した値です。

注※2 Eden領域が取り得る最大の領域サイズは、(New領域の領域サイズ)-(Survivor領域の使用サイズ)を指します。

VCM ログ

[id]<date> [cm_event][User: user_cpu secs][Sys: sys_cpu secs]

*改行なし。*項目間のスペースなし。

出力項目

出力内容

意味

id

VCM

Java VMログファイル識別子。G1GCのCMログでは「[VCM]」が出力されます。

date

<letters>

CMが開始された日時。

-XX:-HitachiVerboseGCPrintDate指定時は出力されません。

cm_event

Concurrent Root Region Scan Start|Concurrent Root Region Scan End|Concurrent Mark Start|Concurrent Mark End|Concurrent Mark Stop|Concurrent Cleanup Start|Concurrent Cleanup End

CMの状態。

Concurrent Root Region Scan Start: Concurrent Root Region Scanが開始された。

Concurrent Root Region Scan End:  Concurrent Root Region Scanが終了した。

Concurrent Mark Start:Concurrent Markが開始された。

Concurrent Mark End:Concurrent Markが終了した。

Concurrent Mark Stop:Concurrent Markを中止した。

Concurrent Cleanup Start:Concurrent Cleanupが開始された。

Concurrent Cleanup End :Concurrent Cleanupが終了した。

usr_cpu

<time>

全CMスレッドがユーザーモードで費やしたCPU時間の合計。

単位は秒。

-XX:-HitachiVerboseGCCpuTime指定時は出力されません。

CPU時間取得に失敗した場合には「unknown」と表示します:[User: unknown]

CM の状態がStartの場合、0が出力されます。

sys_cpu

<time>

全CMスレッドがカーネルモードで費やしたCPU時間の合計。

単位は秒。

-XX:-HitachiVerboseGCCpuTime指定時は出力されます。

CPU時間取得に失敗した場合には「unknown」と表示します:[Sys: unknown]

CM の状態がStartの場合、0が出力されます。

入力例

  1. -iオプションを指定してjavagcコマンドを実行します。

    javagc -i -v -p 8326

  2. GCを発生させるかどうかの確認メッセージが表示されます。

    Force VM to execute GC ? (y/n)

  3. GCを発生させる場合はyを、発生させない場合はnを入力します。

    Force VM to execute GC ? (y/n)y

出力例

VG1 ログ

[VG1]<Thu Oct 02 10:38:56.193 2014>[Full GC 753K/2048K(8192K)->678K/1024K(8192K), 0.0097901 secs][Status:-][G1GC::Eden: 1024K(2048K)->0K(2048K)][G1GC::Survivor: 0K->0K][G1GC::Tenured: 1024K->1024K][G1GC::Humongous: 0K->0K][G1GC::Free: 6144K->7168K] [Metaspace: 3634K(4492K, 4492K)->3634K(4492K, 4492K)][class space: 356K(388K, 388K)->356K(388K, 388K)] [cause:System.gc][RegionSize: 1024K][Target: 0.2000000 secs][Predicted: 0.0000000 secs][TargetTenured: 0K][Reclaimable: 0K(0.00%)][User: 0.0000000 secs][Sys: 0.0000000 secs][IM: 20459K, 21920K, 0K][TC: 35][DOE: 0K, 0][CCI: 1172K, 245760K, 2496K]

VCM ログ

[VCM]<Wed Jul 24 11:45:20 2013>[Concurrent Root Region Scan Start][User: 0.0000000 secs][Sys: 0.0000000 secs] [VCM]<Wed Jul 24 11:45:20 2013>[Concurrent Root Region Scan End][User: 0.0126134 secs][Sys: 0.0146961 secs] [VCM]<Wed Jul 24 11:45:20 2013>[Concurrent Mark Start][User: 0.0000000 secs][Sys: 0.0000000 secs] [VCM]<Wed Jul 24 11:45:34 2013>[Concurrent Mark End][User: 0.0156250 secs][Sys: 0.2495800 secs]

戻り値

戻り値

説明

0

正常終了しました。

1

異常終了しました。

2

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

出力メッセージ

次のエラーメッセージまたは警告メッセージが出力された場合、Explicitヒープ詳細情報付き拡張スレッドダンプは出力されません。

項番

エラーメッセージ

説明

1

usage: javagc [-f|-i] [-v] [-s] [-ehgc] -p process-id

javagcコマンドへの引数の指定が間違っています。

2

javagc: illegal option--オプション

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

3

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

javagcコマンドの引数に指定したプロセスIDに問題があり、通信処理でエラーが発生しているため通信できません。または、javagcコマンドの引数に指定したプロセスIDに該当するプロセスがありません。

4

プロセスID: Not owner

javagcコマンドで指定したプロセスID0が指定されています。

5

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

javagcコマンドの引数に指定したプロセスIDに該当するプロセスは、前回のjavagcコマンドによるGCを実行中です。javagcコマンドによるGC実行要求はキャンセルされます。

6

javagc: can’t create work file at temporary directory, this request canceled

一時ファイル用ディレクトリーに参照・書き込み権限がない場合、GC要求ファイルが作成できません。このGC実行要求はキャンセルされます。

7

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

一時ファイル用ディレクトリーが取り出せない場合、GC要求ファイルが作成できません。このGC実行要求はキャンセルされます。

8

javagc: unexpected error occurred:エラー原因

javagcコマンド実行中に予期しないエラーが発生しました。エラー原因には、例えば下記のような表示がされます。

  • 作業用メモリー確保に失敗した場合

    malloc systemcall fail (errno=Y)

  • オブジェクトのクローズに失敗した場合

    close systemcall fail (errno=Y)

9

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

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

10

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

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

11

プロセスID: Failed to retry GC. Java process is GC locked.

javagcコマンドの引数に指定したプロセスIDのプロセスが、GC実行が抑止される状態のため、GC処理を実行できませんでした。

注意事項