Topics
Enterprise Architecture
Steven Pozarycki著
2007年12月13日(翻訳記事2008年2月29日)
このドキュメントでは、チェックリストに沿ってBEA JRockit JVMをチューニングする方法を紹介します。難解なコマンドラインオプションの使用方法から反復的なパフォーマンステストの実行方法まで、広い範囲を取り 扱っています。ここで紹介するデータのほとんどは、筆者がお客様の協力によって得たものです。これ以外に役立つ情報をご存知の方は、本ドキュメントの更新 時に組み入れたいと思いますので、ぜひ筆者までお知らせください。
必要な箇所では具体的な製品バージョンを記していますが、ここで紹介するのは一般的なガイドラインであり、JRockitのほとんどのバージョンに当てはまります。新たな設定や最適化がJRockitのリリースごとに追加されていますので、リリースノートおよびJRockitの製品センターをご確認ください。
まず最初に、実行時のアプリケーションサーバで使用されているJRockitのバージョンを確認する必要があります。バージョンを確認するには、該 当するアプリケーションサーバのログファイルをチェックします。また、適切なスクリプトで環境設定を行ってから、java -versionを実行して実行中のJRockitのバージョンを確認するという方法もあります。
次に、開発環境または実環境、あるいはその両方で使用されている現在のJVMフラグを確認します。例えば、起動時には次のように表示されます。
-server -Xms1024m -Xmx1536m -Xverboselog:gc.log -Xverbose:memory -Xgcprio:throughput
この出力から、現在のJRockitインスタンスがどのように設定されているかがわかります。
アプリケーションの目標を定めます。それは、「応答時間の短縮」の場合もあれば、「アプリケーションパフォーマンスの向上」の場合もありますが、 目標によって、必要なガーベッジコレクションのアルゴリズムは異なります。
例えば、目標がアプリケーションパフォーマンスの向上である場合は、動的なガーベッジコレクタ、-Xgcprio:throughputを設定しま す。応答時間の短縮が目標である場合は、Xgcprio:pausetime -Xpausetarget=XXXでpausetargetに値を設定する方法が最適です。詳細については、JRockitのチューニングに関するドキュメントを参照してください。
JVMのパフォーマンスに問題がある場合、まずデータを収集して分析することをお勧めします。このような作業の経験があるチームメンバが分析を行うか、情報をBEAサポートに送付して詳細な分析を依頼します。
手始めに、問題が発生している間に約10分間のJRockit記録(JRA)を収集します。そのためには、jrcmd.shユーティリティまたはJRockit Mission Control(JRMC)を使用します。詳細については、この後の「パフォーマンステスト中のJRCMD/JRA」および「JRockit Mission Control」セクションを参照してください。また、JRockit Mission Controlに関するドキュメントも参照してください。ここで注目に値するのがレイテンシ分析セクションです。この項目でレイテンシの問題に関する詳細情報を確認できます(JRockitでこの機能を有効にするライセンスが必要)。
次に、問題が発生しているときに詳細なログを収集します。そのためには、サーバインスタンスを開始するときにJVMのコマンドラインで次の引数を指定します。
-Xverboselog:perTestGC.log -Xverbose:opt,memory,gcpause,memdbg,compaction,gc,license -Xverbosetimestamp -Xgcreport
これにより、分析に役立つデータが指定のperTestGC.logファイルに収集されます。このデータを、チームメンバまたはBEAサポート(あるいはその両方)が分析します。
通常は、アプリケーションからガーベッジコレクションの実行要求を行う(つまり、アプリケーションコード内でSystem.gc()を呼び出す)こ とはありませんが、 そうした要求が行われれば問題になると考えられる場合、オプションを指定することでこれを無効にすることができます。無効にするには、サーバインスタンス を開始するときにJavaのコマンドラインで-XXnoSystemGCフラグを指定します。
では次に、反復的なパフォーマンステストを実施して問題を特定する方法について説明します。