[AIX Solaris HP-UX Linux Windows]

Sun HotSpot JVM チューニング・パラメーター (Solaris および HP-UX)

Sun HotSpot Java™ 仮想マシン (JVM) のチューニングは、JVM 構成を開発し、データ (主に verbosegc データ) を収集し、そのデータを分析する反復プロセスです。したがって、構成の改訂はすべて次のサイクルで適用されます。

Sun HotSpot JVM パラメーターは数多くありますが、以下のパラメーターは調整の中核をなすとみなされています。これらのパラメーターのどれを変更するかは、選択した構成によって異なります。そのため、JVM の調整方法を完全に理解するには、以下のパラメーターの説明を確認するだけでなく、Sun HotSpot Java 仮想マシン (Solaris および HP-UX) の調整について資料で確認することが推奨されます。

すべての Sun HotSpot オプションは、標準形で指定されます。 この標準形を理解しておくと、オプションの転記と命令の解釈に関係する問題、および JVM がオプションをリジェクトして、開始を拒否することに起因する潜在的な混乱を回避するのに役立ちます。

-X option あるいは - option などの標準またはポータブルな VM オプションではなく、-XX オプションで始まる Sun HotSpot JVM の実装に特有の Sun HotSpot オプションに特に注意する必要があります。 これらのオプションのほとんどはブール値を取るため、true または false のいずれかに設定されます。これらの設定は、機能を使用可能にするか使用不可にするかのいずれかを行います。 以下の標準形は、オプションを使用可能にするために使用されます。このような使い方は、調整プロセスでオプションの設定を変更する場合に一般的に行われます。
-XX:+ option
以下の標準形は、オプションを使用不可にするために使用されますが、この標準形はあまり頻繁には使用しません。
-XX:- option
トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble):
  • 正符号 (+) または負符号 (-) は、コロンの直後に続ける必要があります。そうしなかった場合、そのオプションは一般に値を要求しますが、option=value というフォーマットをしているため、値の代入のように見えます。
  • SUN Web サイトに記述されているように、-XX Hotspot オプションは、JDK の以降のリリースで、予告なく変更される場合があります。 したがって、オプションを指定する前に、そのオプションが、ご使用のシステムで実行されている JDK のバージョンに対してサポートされているかどうかを確認する必要があります。
gotcha

どちらのオプションを使用するかを決定する場合、一般にオプションの名前は、そのオプションが使用可能の場合に行われるアクションの説明になっています。ほとんどのオプションでは、デフォルト値はその機能が使用不可になるように設定されています。したがって、既に機能が使用不可になっているオプションを使用不可にすると、二重否定の状況になってしまいます。このことは、Disable という語で始まる名前を持つオプションに特に当てはまります。例えば、DisableExplicitGC オプションのデフォルト設定では、JVM は明示的なガーベッジ・コレクション要求を受け入れます。したがって、通常は、このオプションの前に正符号 (+) を指定して、このオプションを使用可能にします。この場合の正符号 (+) は、明示的なガーベッジ・コレクション要求の受け入れを使用不可にする効果を持っています。これが、このオプションの名前が暗黙で意味するところです。例えば DisableExplicitGC のようなオプションを使用した場合、-XX:-DisableExplicitGC という設定を行うことはほとんどありません。この設定は、このオプションのデフォルト・アクションを指定することと等価だからです。

オプションの名前に Use という語が含まれている状況では、一般にはそのようなオプションの方が、その機能の使用可能化または使用不可化のいずれに対しても意味を理解しやすく、正符号 (+) または負符号 (-) の意味は通常はより直感的です。

値を指定する必要がある場合、このようなオプションは、オプションと設定値の間に等号を含む代入のように見えます。この状況では、このようなオプションは、等号のすぐ後に適切な数値が続き、等号と数字の間には空白スペースがないものと想定します。この場合の値は、標準の省略形 (例えば、キロバイトを表す k、メガバイトを表す m、あるいはギガバイトを表す g) を受け入れることができる場合が多く、そのような場合は、これらの値を指定するのが適切です。仮想マシンは、そのようなパラメーターに対しては限られた検証しか実行せず、検査結果が無効になった場合は、通常、仮想マシンを開始できないことを示すエラー・メッセージを発行します。

-Xmx (最大 Java ヒープ・サイズ)

このパラメーターは、-XX:MaxPermSize とともに調整し、十分な Java ヒープ・メモリーを提供するためのものです。Java ヒープ内のオブジェクト・ストレージの最大 Java ヒープ・サイズに値を指定する場合、 システムが処理するように設計されているピーク入力ボリュームの処理に必要なピーク・リソース要求を考慮してください。

これとは反対に、-Xms パラメーターを使用して指定される Java ヒープの初期最小サイズは、ルーチンの定常状態の入力負荷の下で、システムの通常運用で発生するパーシスタント・データを収容するのに必要な Java ヒープのサイズ設定を反映します。そのようなリソース要求により、効率的なシステム始動が保証され、多くのガーベッジ・コレクション・サイクルでヒープ容量を増やさずに、迅速な初期化に必要なだけの量のストレージが要求されます。そのため、Java ヒープの作業サイズ容量は、事前に分かっている、ルーチンの定常状態のワークロードを収容するための標準容量と、システム設計のピーク・サイズとの間を変動するため、ヒープ容量の変動は、システム入力 (例えば、集中的なアクティビティーの増加、あるいはワークロードの増加など) の変動を反映したものになります。

Java ヒープの作業サイズ容量は、システムの実行状態に関する有益な情報と考えられます。Java ヒープの初期最小サイズの調整では、システム始動の最適化のみを行うようにする必要があります。最小ヒープ・サイズと最大ヒープ・サイズを同じ値に設定すると、Java ヒープが固定され、Java ヒープのハウスキーピングのための JVM のリカバリー・オプションに制約が生じます。このタイプのセットアップは、Java ヒープ・リソースのパフォーマンス上のペナルティーと利用効率の低下を招く可能性があります。

-XX:+AggressiveHeap

このパラメーターは、組み込みの調整を使用可能にした、デフォルトのスループット/並列スカベンジ・コレクターを使用している場合に使用します。JVM は、それが採用している調整アルゴリズムのパラメーターを、稼働中のオペレーティング・システムのすべてのリソースの使用に基づいて積極的に調整しようとします。単一の製品プロセスが、オペレーティング・システムのすべてのリソースを使用して実行している状況では、JVM が満足のいく結果を出すことができるかどうかは、このオプションの使用によって決まります。 JVM の結果のテスト中にこのオプションを使用すると、調整の作業量が減ります。

-XX:CMSInitiatingOccupancyFraction=75

このパラメーターは、並行 low-pause mark-sweep コレクターを使用する場合に構成します。このオプションは、CMS を制御するために使用されます。このオプションは、専用のバックグラウンド・スレッドが、ヒープの Tenured 領域でガーベッジ・コレクションを行う場合のためのトリガー条件を設定します。他のガーベッジ・コレクション・モードとは異なり、このガーベッジ・コレクション・アクションは割り振りが失敗するのを待ちません。 そうではなく、その目的は、ガーベッジ・コレクションをトリガーして、割り振りが行われる前に十分なスペースを回復することです。これを行わなかった場合、割り振りは失敗する可能性があります。主トリガーは、Java ヒープのパーセント利用率に基づいており、デフォルトである約 70% に設定されています。一般にこのデフォルト値は、開始した CMS サイクルが十分に経過することを保証しますが、その頻度は必要以上に高い場合があります。

ただし、非常に小さい Eden 領域しか使用せず、Survivor スペースは使用しない場合、世代別ガーベッジ・コレクションのサポートが寿命の短いオブジェクトを収集できるようになっているため、オブジェクトの経過時間が長くなる機会はほとんどありません。世代別ガーベッジ・コレクションの恩恵を受けているシステムの場合、多くのきわめて寿命の短いオブジェクトを生成することによって、CMS デフォルトは、Sun HotSpot 構造の主要な設計目的である世代別サポートを利用する機会を拒否します。若い世代の Survivor スペース、および適度な Eden 領域にリソースを適度に投資するだけの場合、完全な世代別ガーベッジ・コレクション・アクションを再度使用可能にすることにより、おそらく 1 秒以下しか一時割り込み停止が発生せず、経過時間の長いオブジェクトの Tenured 領域へのプロモーションが低く保たれます。この状態では、オブジェクトの経過時間が長くなると、生存している内容のフリー圧縮の恩恵をフルに受けることができ、ヒープが大きい場合でも CMS スレッドが Tenured 領域を収集する機会が最大限に与えられます。

-XX:+DisableExplicitGC

このオプションは、システムのソフトウェア・コンポーネントに、不要な、あるいは時宜を逸した大きなガーベッジ・コレクション・サイクルが発生しないようにするために、明示的なガーベッジ・コレクションを使用不可にします。

開発者は、プログラマーによって開始される完全圧縮ガーベッジ・コレクション・サイクルを発生させるための System.gc() 呼び出しを行わないようにすることをお勧めします。その理由は、そのような呼び出しを行うと、アプリケーション・システム全体に対するリソースとガーベッジ・コレクションの調整が妨げられる可能性があるからです。厳しい一時停止時間の要件を満たそうとしており、プログラマーによって開始されるガーベッジ・コレクションの呼び出しが行われないようにしたい場合は、このオプションを使用することを十分に検討してください。それは、このオプションを指定すると、明示的な System.gc() 呼び出しは無視されるからです。

-XX:MaxNewSize= および -XX:NewSize=

これらのパラメーターは、デフォルトのスループット/並列スカベンジ・コレクターを使用しているけれども、-XX:+UseAdaptiveSizePolicy パラメーターが提供する組み込み調整を使用するのではなく、このスカベンジ・コレクターを手動で調整する場合に使用します。 若い世代の現在のサイズは、-XX:NewSize パラメーターに対して指定される、若い世代の初期または最小のサイズ以上になっていなければなりません。 このサイズは、-XX:MaxNewSize パラメーターで指定される若い世代の最大サイズに対して指定した値以下です。

環境によっては、-XX:NewRatio パラメーターによって決定される、世代別ガーベッジ・コレクションが考慮するヒープのサイズに制約を課すことが推奨されている場合もあります。一般にこの場合は、若い世代の最大有効範囲が制限されますが、時として最小サイズが制限される場合もあります。 例えば、世代別ガーベッジ・コレクションの処理対象となる可能性のある大きなオブジェクトの限度を設定する、または一般に存続時間の長いパーシスタント・オブジェクトのセットよりも長く使用されているメモリーの最大サイズを制限するためには、若い世代のヒープに最大サイズを設定する必要がある場合があります。若い世代のオブジェクトに使用されるヒープのセクションに対して最小サイズを指定すると、一般には、Survivor スペースの使用を調整することになります。その重要性は通常は二次的なものですが、-Xms パラメーターで指定される、Java ヒープ内の最小リソースに対する制約は満たす必要があります。

世代別ガーベッジ・コレクション内で特定の動作を得ようとしていない限り、NewRatio オプションを使用して最小または最大のいずれかを個別に指定する必要はありません。最大値または最小値のいずれかを設定する理由は、一般にさまざまです。若い世代セクションのサイズを -Xmn パラメーターを使用して設定および固定するための簡略表記が存在している場合でも、これらの設定を同じ値に設定する必要はほとんどありません。 ただし、構成が不適切であれば、世代別ガーベッジ・コレクションの利点がまったく失われてしまうというリスクが生じます。

-XX:MaxPermSize (永続領域)

このパラメーターは -Xmx と一緒に調整し、十分な Java ヒープ・メモリーを提供するためのものです。永続領域が採用されているのは、すべてのクラス・コード、および「intern」されたストリングなどのクラス風のデータを保管するためです。

永続領域は、同時に一緒にロードされる可能性のあるすべてのクラスを格納するのに十分な大きさにする必要があります。この領域に適切なサイズを決定する際に混乱が生じる可能性があります。その理由は、ヒープのこの領域は比較的小さく、その拡張はゆっくりしており、クラス風のオブジェクト用に特に採用されたものであり、一般にその利用率が、その現在容量の 99% から 100% であることが観測されているからです。 したがって、メモリー不足イベントをどう解釈するかについて注意する必要があります。この領域は、この領域により多くのリソースを与える前に最大に拡張されることを常に確認する必要があります。

トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): Java Platform, Enterprise Edition (Java EE) ベースのどのシステムにおいても、 アプリケーション・クラス・ローダーが頻繁に使用される場合には、-Xnoclassgc パラメーターを使用しないようにしてください。それは、このパラメーターは、 ヒープのこの重要な領域のガーベッジ・コレクションを妨げ、 事実上クラス・データのメモリー・リークを発生させるからです。変化しているクラスの内容を頻繁にデプロイしている開発システムの場合は、この領域のサイズを非常に大きく設定しておく必要があります。また、このシステムを定期的に再始動して、古いバージョンの休止コードが現在使用している領域内に累積しないようにする必要もあります。そうでないと、クラス・ローダーがリリース不能になります。gotcha

-XX:MaxTenuringThreshold=number-of-collections

このパラメーターは、並行 low-pause mark-sweep コレクターを使用している場合に構成します。このパラメーターは、新しい世代セクションから古い世代セクションへのオブジェクトのプロモーションを制御します。それを行うために、オブジェクトが古い世代セクションに移動される前に、オブジェクトが新しい世代セクションにとどまっていられるコレクションの数を指定します。デフォルト値は 8 です。

-XX:NewRatio=2

このパラメーターは、デフォルトのスループット/並列スカベンジ・コレクターを使用してはいるけれども、-XX:+UseAdaptiveSizePolicy パラメーターが提供する組み込みの調整を使用するのではなく、このスカベンジ・コレクターを手動で調整する場合に使用します。

Java ヒープは、オブジェクトが格納される 2 つのセクションに分けられます。これらのセクションの内の 1 つでは、世代別ガーベッジ・コレクションが行われ、若い世代のオブジェクトが常駐します。もう 1 つのセクションは、ヒープの残りを構成し、Tenured ヒープと呼ばれます。このセクションには、古いオブジェクト、または経過時間が長いオブジェクトが常駐します。このオプションは、世代別ガーベッジ・コレクションをサポートする若い世代の領域を、ヒープ容量全体に対する比率としてサイズ設定します。若い世代の現在のサイズは、-XX:NewSize パラメーターで指定される、初期または最小の若い世代のサイズ以上になっていなければなりません。 このサイズは、-XX:MaxNewSize パラメーターで指定される若い世代の最大サイズに対して指定した値以下です。若い世代のサイズは、Tenured 領域に対する比として維持され、 メインの Java ヒープの現在の容量によって決定されます。デフォルト値である 2 は、Tenured 領域が若い世代の領域のサイズの 2 倍であるという意味です。 つまり、若い世代は Java ヒープ全体の 1/3 であることになります。

このデフォルト値の場合、一般には、Sun HotSpot JVM の調整の一般的な目標である、世代別ガーベッジ・コレクションのパフォーマンスは良好です。ただし、他の戦略もあります。例えば、世代別ガーベッジ・コレクションが行われるヒープの比率を増やすこともできます。この比率を変更する場合は、世代別ガーベッジ・コレクションによって合理的に維持できるヒープのサイズについては限度があり、その限度を超えると、すべての世代別ガーベッジ・コレクションが失われることがあることに注意してください。世代別ガーベッジ・コレクションが失われる理由は、ガーベッジ・コレクション・サイクルは、ヒープの世代別の部分のみを考慮する小規模なガーベッジ・コレクション・サイクルではなく、ヒープ全体に対する大規模なガーベッジ・コレクション・サイクルになるからです。

2 は、VM モードで稼働しているサーバーのデフォルト値です。

-XX:NewSize=128m

このパラメーターは、並行 low-pause mark-sweep コレクターを使用する場合に構成します。若い世代の現在のサイズは、-XX:NewSize パラメーターに対して指定される、若い世代の初期または最小のサイズ以上になっていなければなりません。 CMS で調整するときの難しさの 1 つは、CMS サイクルが異常終了したときに発生する、最悪の場合のガーベッジ・コレクション時間が数秒になることがあり、このことが特に、長い一時停止を回避するための方法として CMS を採用しているシステムに対してコストが高くつく原因になります。

このため、サービス・レベル・アグリーメントに CMS の使用に関する記述がある場合があります。この状況下では、CMS に成功の機会が与えられることを保証するためには、調整を誤るように注意する必要があります。CMS が成功するのは、空きリソースが要求される前に十分な空きリソースが使用可能になっていることを常に保証するために、CMS サイクルが十分に早く開始することを CMS の先行トリガーが保証している場合のみです。Tenured 世代がいっぱいになる前に CMS コレクターが終了できない場合は、アプリケーションのスレッドを一時停止してコレクションを完了します。これは、完全コレクションと呼ばれます。 完全コレクションは、CMS コレクターの動作をよりアプリケーションに適したものにするために、CMS コレクションにさらなる調整が必要である徴候です。

-XX:SurvivorRatio=

このパラメーターは、デフォルトのスループット/並列スカベンジ・コレクターを使用してはいるけれども、-XX:+UseAdaptiveSizePolicy パラメーターが提供する組み込み調整ではなく、手動でこのスカベンジ・コレクターを調整する場合、または並行 low pause コレクターを調整しようとしている場合に使用します。

世代別ガーベッジ・コレクションのアクションが関係するのは、経過時間が短いオブジェクトと経過時間が長いオブジェクトの切り分けです。ヒープには、使用し続けられているオブジェクトのみを保持する必要があります。世代別ガーベッジ・コレクションをホストしている若い世代の領域には、さらに内部構造が含まれます。この領域には、オブジェクトに最初に割り当てられた大きな Eden 領域と、存続時間が長いオブジェクトが常駐する、より小さい Survivor スペースが含まれます。SurvivorRatio は、より小さい Survivor スペースを基準にして Eden 領域をどの程度の大きさにするかという観点から、これらの領域のサイズを設定します。Survivor スペースのサイズ設定の重要性は、通常は二次的でしかありません。それは、最適化の恩恵を受けるオブジェクトのボリュームは、アプリケーションによって大きく変動するからです。ただし、一般的には、この値はデフォルト値の 25 から 8 程度に下げた方がよいでしょう。

このパラメーターの変更は、殿堂入り (tenuring) に関するデータ分析からみても正当だといえます。このデータは、-XX:+PrintTenuringDistribution パラメーターを使用して取得できます。

トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): -XX:SurvivorRatio= option は、JVM パラメーター -XX:+UseAdaptiveSizePolicy とは互換性がありません。 状況に応じていずれかを使用してください。gotcha

-XX:TargetSurvivorRatio=

このパラメーターは、デフォルトのスループット/並列スカベンジ・コレクターを使用してはいるけれども、-XX:+UseAdaptiveSizePolicy パラメーターが提供する組み込みの調整を使用するのではなく、このスカベンジ・コレクターを手動で調整する場合に使用します。

このパラメーターを指定すると、JVM は、Survivor スペースのパーセント利用率を増やし、それによって不完全なプロモーションを回避し、可能であれば、オブジェクトが若い世代から収集される機会を最大にします。 デフォルト値は 50 です。このパラメーターを 90 に設定すると、これらの領域の利用率が改善されることがあります。

-XX:+UseAdaptiveSizePolicy

このパラメーターは、デフォルトのスループット/並列スカベンジ・コレクターおよびデフォルトのスループット/並列スカベンジ・コレクターを使用した組み込み調整を使用可能にするために使用します。

Sun は、自動オペレーティング・システム検出の他に、スループットの目標とスループット・コレクション戦略の効率を最適化するために、JVM の自動調整を行う調整アルゴリズムを組み込んでいます。 この調整アルゴリズムはデフォルトでオンになっており、-XX:+UseAdaptiveSizePolicy パラメーターを使用して明示的に使用されます。この調整アルゴリズムは、アプリケーションのワークロードの大部分に対しては一般に満足できる結果を出してくれるはずで、追加の調整作業を行う手間が省けます。ただし、その場合であっても、このアルゴリズムを実稼働環境で使用する前に、ワークロードに合わせてこのアルゴリズムをテストし、スループット要件を満たすことを確認する必要があります。

-XX:+UseConcMarkSweepGC

このパラメーターは、並行 low-pause mark-sweep コレクターを使用可能にするために使用します。このガーベッジ・コレクション・モードは、若い世代の内容を収集する必要があるために割り込んでくる一時停止を、既製のシステムで最小限に抑えるよう、世代別ガーベッジ・コレクションを再構成します。

このパラメーターは、若い世代のエクステント、すなわち Eden 領域も最小化します。サーバー・クラス・システムは、一般に複数のプロセッサーの可用性を検出し、限られた量の作業しか利用できず、調整に伴うオーバーヘッドが生じた後では複数のスレッドを使用する利点がほとんどない場合でも、若い世代を並列で収集し、可能な最小一時停止を確実に実現しようとします。世代別ガーベッジ・コレクションによって実行されなくなる作業を埋め合わせるためには、メイン・ヒープにコミットされるリソースを、スループット・コレクターの設定と比較して一般に約 10% から 30% だけ増やす必要があります。

-XX:+UseParallelGC

このパラメーターは、デフォルトのスループット/並列スカベンジ・コレクターを使用可能にするために使用します。

サーバー JVM のデフォルトのガーベッジ・コレクション・モードは、若い世代に対して小規模なガーベッジ・コレクションを、フォアグラウンドの stop-the-world タスクとして並行して行うスループット・コレクターを採用するためのものです。このコレクターは、-XX:+UseParallelGC パラメーターを使用することにより、明示的に使用可能にできます。 スループット以外の目標を指定できます。ただし、そのような目標を達成しなかった場合のペナルティーはかなり厳しくなる可能性があり、それによって致命的なメモリー不足エラーが発生することがあります。


トピックのタイプを示すアイコン 参照トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rprf_hotspot_parms
ファイル名:rprf_hotspot_parms.html