Jump to content 日本-日本語

製品  >  ソフトウェア  >  HP-UX   >  Knowledge-on-Demand  >  Javaパフォーマンス・チューニング

Javaパフォーマンス・チューニング

第2回:ガベージ・コレクション

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
連載Javaパフォーマンス・チューニング:第2回
Javaパフォーマンス・チューニング 第2回
ガベージ・コレクションを知る
ガベージ・コレクションを分析する
ページ:  戻る   |   1   2

ガベージ・コレクションを分析する


JVMオプション「-Xverbosegc」の活用


ガベージ・コレクションが実際にどのタイミングで発生しているかを知るには、以下のようにJVMのオプションとして「-Xverbosegc」を指定します。

$ java -Xverbosegc:file=myfile.out <クラス名>

これにより、「myfile.out」という名前のファイルにガベージ・コレクションのログを記録することができます。このファイル名は、自由に変更することができます。ちなみに、このオプションの指定によるパフォーマンスの低下は、ディスクへのファイル出力を除けば非常に小さなものです。よって、必要に応じて、実運用システムにも使用することができます。

このオプション指定によって出力されるログには、以下のような内容が記録されます。

<GC: -1 21.040560 1 824 1 13369144 0 13369344 0 1703936 1703936 01206120 50331648 4793888 4793888 4980736 0.124737 >< GC: -1 24.040994 2 80 1 13369344 0 13369344 1703936 1703936 17039361206120 5058264 50331648 5032840 5032840 5242880 1.896397 >< GC: 2 28.602708 1 216 1 1109352 0 13369344 1703936 0 1703936 50582646780520 50331648 5242688 5242688 5242880 0.870284 >< GC: -1 45.500549 3 656 32 13369136 0 13369344 0 805256 17039366780520 6780520 50331648 8720800 8720800 8916992 0.055405 >

このログには、ガベージ・コレクションが実行されたタイミングやその範囲など、様々な情報を表す19のカラムが含まれています。以下のコマンドを実行することで、各カラムの意味を説明するヘルプメッセージを表示できます。

$ java -Xverbosegc:help

GCのログを見やすく加工する


上記例のように、ガベージ・コレクションのログ内容をそのまま読んで理解することは困難です。そこでHPでは、同ログを見やすく整形するためのツール「processVerboseGC.awk」を提供しています。このツールは、以下のWebページからダウンロード可能です。

http://www.hp.com/go/java (java products for HP-UX )
  →information library
    →processverbosegc.awk script

ツールをダウンロードしたのち、以下のコマンドを実行します。

$ cat myfile.out |awk -f processVerboseGC.awk > output.txt

これにより、以下のような読みやすい形態にログを変換することができます。

GC: Full GC required - reason: Old generation expanded on last scavenge

GC: Full 1.985317 s since last: 1.985317 s gc time: 96 ms
eden: 1834928->0/3670016    survivor: 120576->0/262144
tenure: 2    old: 3204992->2356088/3928064

GC: Scav 2.190710 s since last: 0.205393 s gc time: 4 ms
eden: 3669968->0/3670016    survivor: 0->120720/262144
tenure: 32    old: 2356088->2356088/3928064


このログは、Javaプログラムの実行中に発生した3 回のガベージ・コレクションを順番に示しています。その発生時刻は、Javaプログラムの開始時から経過した時間として、文字列「Full」もしくは「Scav」に続いて表示されています。また、その後には「eden」や「survivor」、「tenure」、「old」といった文字列が表示されていますが、これらの単語の意味は本連載で追って説明する予定です。

Full GCの発生に注目する


文字列「Full」は、「Fullガベージ・コレクション(Full GC)」の発生を表します。一方、文字列「Scav」は、「Scavengeガベージ・コレクション(Scavenge GC)」を表します。次回説明するように、前者のGCは後者に比べて長い処理時間を要します。よって、Full GCが頻繁に発生している場合(例えば1分間に1回以上)は、何らかの対策を講じなくてはなりません。

また、Javaアプリケーションによっては、開発者が記述したJavaプログラムあるいはライブラリによって、明示的にガベージ・コレクションを呼び出している場合があります。その際には、上記ファイルに以下のようなログが記録されます。

Full GC required - reason : call to System.gc() or Runtime.gc()

こうした明示的なガベージ・コレクション実行は、パフォーマンスの観点からは可能な限り避けなくてはなりません。よって、Javaプログラムから「System.gc()」もしくは「Runtime.gc()」と記述されているコードを取り除くか、もしくはJVMオプションとして以下のように「-XX:+DisableExplicitGC」を指定し、明示的なガベージ・コレクション実行を抑制します。

$ java -XX:+DisableExplicitGC <クラス名>

GCログの内容を観察する


さて、上記ログの内容について、もう少し詳しく見ていきましょう。先に述べたとおり、「Full」あるいは「Scav」のすぐ後に続く数字は、Javaプログラム開始後の経過時間です。この時間(単位は秒)を見れば、個々のGCイベントがどの時点で発生したのかを知ることができます。また、文字列「since last」の後には、直前のGCから経過した時間を表す数字が記されます。文字列「gc time」の後には、このGCイベントの完了までに要した時間が表示されます。

これらの時間を注意深く観察することで、JVM内部におけるガベージ・コレクションの挙動を把握することができます。正常に動作するJVMの場合、Full GCの回数はScavenge GCよりも少なくなります。また、Scavenge GCは、0.5秒以上の間隔を空けて数秒ごとに実行され、通常は1回あたり3〜400ms以内で完了します。

もしScavenge GCに1秒以上の時間が費やされている場合は、Javaプログラムを実行しているスレッドがその間完全に停止していることになり、パフォーマンスの問題を抱えていることが分かります。これを解決するには、JVMのオプションを指定して、ヒープ内部の各領域の利用度に応じたヒープ・サイズを指定します。この方法について詳しくは次回説明します。

Full GCは、ヒープ・サイズによっては数秒を要することもあります。通常は、Full GCが1秒以内に終了し、Scavenge GCと比較して少ない頻度で発生するようにJVMを設定するようにします。例えば、Full GCが5〜10分おきに発生し、Scavenge GCは5から10秒おきに発生するような間隔であれば、そのJVMの振る舞いは正常であると言えます。なお現在、HPでは、ログ情報をもとにグラフィカルにGCの分析を行うためのツール「HPjtune」を提供しています。HPjtuneを利用することによって、GCに関連する問題点を容易に発見することができます。

以上、今回は、Java言語におけるガベージ・コレクションの役割を解説し、その発生頻度をログに記録する方法を説明しました。次回は、JVMのヒープ・メモリの構造を説明し、パフォーマンスを最大限に引き出すためのチューニング方法を掘り下げる予定です。
連載記事一覧 戻る ページ:  戻る   |   1   2

連載 「Javaパフォーマンス・チューニング」記事一覧

第1回:基本的ルール、パフォーマンス・ツールの使い方
第2回:ガベージ・コレクション
第3回:ヒープ・メモリ管理
第4回:マルチスレッドによるリソース競合
第5回:メモリ・リークの発見
第6回:メモリ・リーク解析とHotSpot JVM

 その他の連載記事


本ページの内容は執筆時の情報に基づいており、異なる場合があります。

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

HPEサポートセンター
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項