ヘッダーをスキップ
Oracle® JRockit Real Time紹介
リリース4.0
B61449-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

3 リアル・タイム・アプリケーションでの確定的なガベージ・コレクション向けのチューニング

この項には、Oracle JRockit Real Time 4.0に含まれるOracle JRockit JVMの確定的なガベージ・コレクタ向けにアプリケーションをチューニングするための以下のガイドラインが含まれています。


注意:

JRockitで使用可能なその他の非標準の起動コマンドの調整についての詳細は、Oracle Technology NetworkのOracle JRockitコマンドライン・リファレンスを参照してください。

3.1 基本的な環境のチューニング

JRockit Real Timeを使用する環境を構成するには、以下のガイドラインを使用します。

3.2 基本的なアプリケーションのチューニング

JRockit Real Timeのアプリケーションを設計する場合は、以下のガイドラインを使用します。

3.3 J2EEアプリケーションのチューニング

JRockit Real TimeのJ2EEアプリケーションをチューニングする場合は、以下のガイドラインを使用します。

3.4 JMSアプリケーションのチューニング

Oracle WebLogic JMSアプリケーションでJRockit Real Timeを使用する場合は、以下のガイドラインを使用します。

Spring JMSテンプレートがリソース参照プールを利用していることを確認します(そうでない場合は、各メッセージごとにJMS接続、セッション、およびプロデューサが暗黙的に作成されて閉じられるため、レスポンス時間に悪影響を及ぼします)。


注意:

リソース参照プールは、ターゲット送り先が各呼出しで変化する場合には適していません。そのような場合は、通常のJMSを使用するようにアプリケーションのコードを変更し、JMS接続、セッション、プロデューサ、およびコンシューマをキャッシュします。

3.5 リアル・タイム・アプリケーション向けのJVMのチューニング

以下のチューニングに関する推奨事項は、JRockit JVMの確定的なガベージ・コレクタを使用する際にさらなるパフォーマンスの向上と休止時間の削減を可能にします。確定的ガベージ・コレクタについての詳細は、Oracle Technology NetworkのOracle JRockitパフォーマンス・チューニング・ガイドを参照してください。

3.5.1 ウォーム・アップ期間の考慮

レスポンス時間が目的のレベルに到達する前に、ウォーム・アップ期間があります。このウォーム・アップ中に、JRockit JVMではクリティカル・コード・パスが最適化されます。ウォーム・アップ期間は、以下のように、アプリケーションとハードウェアに依存します。

  • 高速なハードウェア上で実行され、負荷の大きい、(Javaコード量の点から)小規模なアプリケーションでは、1 - 3分のウォーム・アップ期間があります。

  • 低速なハードウェア(特に、ほとんどのSPARKハードウェア)上で実行され、負荷の小さい、(Javaコード量の点から)大規模なアプリケーションでは、約30分のウォーム・アップ期間があります。

3.5.2 最小/最大ヒープ・サイズの調整

最小ヒープ・サイズ(-Xms)を小さく設定したり、最大ヒープ・サイズ(-Xmx)を大きく設定すると、ガベージ・コレクションの発生頻度に影響を及ぼし、アプリケーションで使用可能なおおよそのライブ・データの量が決定されます。まずはじめに、次のヒープ・サイズの使用を試してください。

   java -Xms1024m -Xmx1024m -XgcPrio:deterministic -XpauseTarget=30

詳細は、Oracle JRockitコマンドライン・リファレンスの-XXコマンドライン・オプションの項を参照してください。

3.5.3 目標休止時間の増減

  • pauseTargetオプションを指定せずに-Xgcprio:deterministicを指定すると、デフォルト値に設定されます。このリリースでは、30ミリ秒です。

  • ハードウェアの速度が遅い、ヒープ・サイズが異なる、実データが多いなどの条件下では、確定的な動作が破綻することもあります。そのような場合は、-XpauseTargetオプションを使用して、デフォルトの目標休止時間(30ミリ秒)を増やす必要がある場合もあります。pauseTargetオプションの現在許容される最大値は5000ミリ秒です。

  • 逆に、アプリケーションで可能な最小休止時間をテストする場合は、デフォルトの-XpauseTarget値を最小値まで減らすことができます。このリリースでは、最小値は10ミリ秒です。

詳細は、Oracle JRockitコマンドライン・リファレンスの-XXコマンドライン・オプションの項を参照してください。

3.5.4 ページ・サイズの設定

ページ・サイズを増やすと(-XXlargePages)、TLB(Translation Look-aside Buffer)でのキャッシュ・ミスを制限することにより、パフォーマンスを向上し、休止時間を削減できます。Oracle JRockit JVMコマンドライン・リファレンスの-XXコマンドライン・オプションを参照してください。

3.5.5 最適な負荷の決定

負荷に関して過度に用心することはありません。確定的なガベージ・コレクションでは、確定による保証を損なわずにかなりの量の負荷を処理できます。負荷が少なすぎると、JVMのオプティマイザとGCのヒューリスティックで扱える情報がほとんどなくなるため、結果的にパフォーマンスが標準以下に低下します。ベスト・プラクティスでは、様々な負荷(確定的なGCを使用する場合と使用しない場合を含む)でベンチマークを実行し、最適な負荷を決定します。

3.5.6 JRockitの詳細な出力によるGC分析

JRockit JVMの詳細な出力は、通常はパフォーマンスに大きな影響を与えずに、JVMのメモリーおよびGCのアクティビティの分析に非常に役立ちます。表3-1に、JVMのメモリーおよびGCのアクティビティの分析時に推奨されるverboseオプションを示します。

表3-1 JRockit JVMの詳細な出力オプション

オプション 処理内容

-Xverbose:opt,memory,memdbg, gcpause,compact,license

GCおよびメモリー分析。

-Xverboselog:verbose-jrockit.log

詳細な出力を指定されたファイルにリダイレクトします。

-Xverbosetimestamp

各詳細行の前に書式設定された日付を出力します。


3.5.7 ファイナライザおよび参照オブジェクトの量の制限

Soft-Weak-、およびPhantom-参照などの、使用されるファイナライザと参照オブジェクトの量を制限してみます。これらのタイプでは特殊な処理が必要とされ、大量に発生した場合は休止時間が30msよりも長くなる場合があります。

3.5.8 ガベージ・コレクション・トリガーの調整

ガベージ・コレクション・トリガー(-XXgctrigger)を調整し、使用されるヒープ領域の容量を制限してみます。こうすることで、アプリケーションを変更せずに、より頻繁にガベージ・コレクションを発生させるようガベージ・コレクションに強制できます。トリガーの制限に達するたびにガベージ・コレクションが開始されるため、ガベージ・コレクション・トリガーは多少確定的です。Oracle Technology NetworkのOracle JRockitパフォーマンス・チューニング・ガイドを参照してください。


注意:

トリガーの値を低く設定すると、ガベージ・コレクションが終了する前にヒープが満杯になる場合があり、新しいメモリーを取得する前にガベージ・コレクションが完了するのを待機する必要があるため、スレッドの休止時間が長くなる原因になります。通常は、ヒープの一部は空いているためメモリーは常に使用可能であり、ガベージ・コレクションでJavaアプリケーションが停止しても休止は短くて済みます。

3.5.9 プロセッサのガベージ・コレクション・スレッドの量の調整

現在では高度な処理を行う各種のハードウェアが入手可能であるため(HyperTransport、Strands、デュアル・コアなど)、JRockit JVMでは開始すべき適切なGCスレッドの数を決定できない場合があります。現在は、1つの物理CPUにつき1つのスレッドを開始することが推奨されます。つまり、コアでなく1つのチップにつき1つのスレッドです。ただし、ガベージ・コレクション・スレッドが多すぎる場合は、システムで実行中のスレッドが増えるほどCPUが飽和状態になり、Javaアプリケーションが影響を受けるため、アプリケーションのレイテンシに影響を及ぼします。逆に、スレッドが少なすぎる場合は、並行処理が減るためにGCのマーク・フェーズが増加します。たとえば、4コアのデュアル・コアIntel Woodcrestマシンで推奨されるGCスレッドの数は2つです。これは、マシンのプロセッサの数と同じです。

JRockit JVMがマシンで使用しているガベージ・コレクション・スレッドの数を表示するには、-verbose:memdbgを使用してJRockit JVMを開始し、起動時に出力される以下の行をチェックします。

   [memdbg ] number of oc threads: <num>
   [memdbg ] number of yc threads: <num>

必要に応じて、-XXgcthreads:<# threads>パラメータを使用してGCスレッドの数を調整します。

詳細は、Oracle JRockitコマンドライン・リファレンスの-XXコマンドライン・オプションの項を参照してください。

3.6 その他のチューニング情報

パフォーマンスおよびチューニングの詳細は、Oracle Technology NetworkのOracle JRockitパフォーマンス・チューニング・ガイドを参照してください。