javagc(GCの強制発生)
形式
javagc [-i|-f] [-v] [-s] [-force] [-ehgc] -p <プロセスID>
機能
メモリリーク,システム障害およびアプリケーションのデバッグのために,プロセスIDが<プロセスID>のjavaプロセスに対して,任意のタイミングでFullGCを発生させます。また,プロセスIDが<プロセスID>のjavaプロセスに対して,任意のタイミングでFullGCと,Explicitメモリブロックの解放を実行します。
javaプロセスとの通信にはSIGQUITシグナルを使用します。コマンドを実行すると,コマンドの処理内容をユーザに確認します。n(発生させない,実行しない,または送信しない)と回答した場合には,コマンドの処理は実行されません(戻り値が1となります)。この確認動作は,-fオプションを指定することで省略できます。
<プロセスID>のjavaプロセスが通常の要因で発生するCopyGCやFullGCを実行中の場合は,その終了を待ってからコマンドを実行します。
引数
- -i
-
次に示すコマンドの処理内容をユーザに確認します。
-
<プロセスID>のプロセスに対して,GCを発生させるかどうか(Windowsの場合)
-
<プロセスID>のプロセスに対して,Explicitメモリブロックの解放を実行するかどうか
-
GCを発生させるためにSIGQUITシグナルを送信させるかどうか(UNIXの場合)
このオプションより前に指定した,-fオプションを無効にします。
-
- -f
-
次に示すコマンドの処理内容をユーザに確認しません。
-
<プロセスID>のプロセスに対して,GCを発生させるかどうか(Windowsの場合)
-
Explicitメモリブロックの解放を実行するかどうか
-
GCを発生させるためにSIGQUITシグナルを送信させるかどうか(UNIXの場合)
このオプションより前に指定した,-iオプションを無効にします。
-
- -v
-
-XX:+HitachiVerboseGCオプションの指定がなくても,JavaVMログファイル作成の規則に従ってJavaVMログファイルを作成して,拡張verbosegc情報を出力します。
その際,以下のオプション値も反映した内容の拡張verbosegc情報を出力します。
-
-XX:+HitachiVerboseGCPrintDate
-
-XX:+HitachiVerboseGCPrintCause
-
-XX:+HitachiVerboseGCCpuTime
-
-XX:+HitachiCommaVerboseGC
-
- -s
-
標準出力に拡張verbosegc情報を出力します。
その際,以下のオプション値も反映した内容の拡張verbosegc情報を出力します。
-
-XX:+HitachiVerboseGCPrintDate
-
-XX:+HitachiVerboseGCPrintCause
-
-XX:+HitachiVerboseGCCpuTime
-
-XX:+HitachiCommaVerboseGC
-
- -force
-
javaプロセスが作成する/tmp/hsperfdata_<ユーザ名>/<プロセスID>ファイルの有無の確認をしないで,-pオプションで指定したプロセスIDのjavaプロセスに対してGCやExplicitメモリブロックの解放を実行します。
なお,このオプションはUNIX用のオプションです。
- -ehgc
-
プロセスIDが<プロセスID>のjavaプロセスに対して,FullGCと,Explicitメモリブロックの解放を実行します。Explicitメモリブロックの解放については,マニュアル「アプリケーションサーバ 機能解説 拡張編」の「7.9 javagcコマンドによるExplicitメモリブロックの解放」を参照してください。
- -p <プロセスID>
-
FullGCや,Explicitメモリブロックの解放を実行したいプロセスIDを指定します。
JavaVM拡張オプションについては,次の個所を参照してください。
-
マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「14.1 JavaVM拡張オプションの一覧」
-
マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「14.2 JavaVM拡張オプションの詳細」
戻り値
- 0:
-
正常終了しました。
- 1:
-
異常終了しました。
- 2:
-
一定時間内にGC処理終了の応答がありませんでした。
入力例
-
-iオプションを指定してjavagcコマンドを実行します。
javagc -i -v -p 8326
-
Windowsの場合,GCを発生させるかどうかの確認メッセージが表示されます。UNIXの場合,プロセスIDの確認メッセージが表示されます。
-
Windowsの場合
Force VM to execute GC ? (y/n)
-
UNIXの場合
send SIGQUIT to 8326:?(y/n)
-
-
Windowsの場合,GCを発生させる場合はyを,発生させない場合はnを入力します。UNIXの場合,SIGQUITシグナルを送信させる場合はyを,送信させない場合はnを入力します。
-
Windowsの場合
Force VM to execute GC ? (y/n)y
-
UNIXの場合
send SIGQUIT to 8326:?(y/n)y
-
出力例
[VGC]<Wed Mar 17 00:42:30 2004>(Skip Full:0,Copy:0)[Full GC 149K->149K(1984K), 0.0786038 secs][DefNew::Eden: 264K->0K(512K)][DefNew::Survivor: 0K->63K(64K)][Tenured: 85K->149K(1408K)][Metaspace: 3634K(4492K, 4492K)->3634K(4492K, 4492K)][class space: 356K(388K, 388K)->356K(388K, 388K)][cause:JavaGC Command]
出力メッセージ
項番 |
メッセージ |
説明 |
---|---|---|
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コマンドで指定した<プロセスID>に0が指定されています。 |
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コマンド実行中に予期しないエラーが発生しました。 <エラー原因>には,例えば下記のような表示がされます。
|
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処理が実行できませんでした。 |
項番 |
メッセージ |
説明 |
---|---|---|
1 |
javagc [-f|-i][-v][-s] [-force] [-ehgc] -p process-id |
javagcコマンドへの引数の指定が間違っています。 |
2 |
javagc: illegal option--<オプション> |
javagcコマンドに指定した<オプション>が不正です。 |
3 |
<プロセスID>: No such process |
javagcコマンドの引数に指定した<プロセスID>に該当するプロセスがありません。または,javagcコマンドで指定した<プロセスID>に該当するプロセスがjavaプロセス以外でした。 |
4 |
<プロセスID>: Not owner |
実行ユーザは,javagcコマンドの引数に指定した<プロセスID>に該当するプロセスのオーナーではありません。 |
5 |
<プロセスID>: Now processing previous request, this request canceled |
javagcコマンドの引数に指定した<プロセスID>に該当するプロセスは,前回のjavagcコマンドによるGCを実行中です。javagcコマンドによるGC実行要求はキャンセルされます。 |
6 |
javagc: can't create work file at /tmp, this request canceled |
/tmpに参照および書き込み権限がないため,GC要求ファイルが作成できません。javagcコマンドによるGC実行要求はキャンセルされます。 |
7 |
javagc: unexpected error occurred:<エラー原因> |
javagcコマンド実行中に予期しないエラーが発生しました。 <エラー原因>には,例えば下記のような表示がされます。
|
8 |
<プロセスID>: Timeout occurred. Java process not responding. |
javagcコマンドの引数に指定した<プロセスID>に該当するプロセスから,一定時間内にGC処理終了の応答がありませんでした。 |
9 |
javagc : please delete <削除できなかったファイル名> in <削除できなかったファイルのフルパス> |
javagcコマンドを終了したときに,内部ファイルを削除できませんでした。削除できなかったファイルのフルパスにある,削除できなかったファイルを削除してください。 |
10 |
<プロセスID>: Failed to retry GC. Java process is GC locked. |
javagcコマンドに引数に指定した<プロセスID>に該当するプロセスが,GC実行が抑止された状態で,GC処理が実行できませんでした。 |
注意事項
-
同じjavaプロセスに対して,同時にjavagcコマンドは実行できません。前回のjavagcコマンドによるGC処理が終了してから実行してください。前回のGC処理が終了している場合は,JavaVMログファイルに出力される拡張verbosegc機能のGCの要因に"JavaGC Command"が出力されます。
-
Windowsの場合,引数に指定したプロセスIDのjavaプロセス所有者以外でもjavagcコマンドを実行できます。
-
UNIXの場合,javagcコマンドはSIGQUITシグナルを指定されたプロセスIDに送信します。誤ってjavaプロセス以外のプロセスIDを指定すると,ほかのプログラムが停止することがあります。
-
UNIXの場合,javagcコマンド実行時に,/tmp/hsperfdata_<ユーザ名>/<プロセスID>ファイルを使用します。該当するファイルが存在しない場合は,javagcコマンドによるGCの要求はできません。ただし,-forceオプションを指定した場合,/tmp/hsperfdata_<ユーザ名>/<プロセスID>ファイルの有無の確認をしないで,-pオプションで指定したプロセスIDのjavaプロセスに対してGCを発生させます。