アプリケーション・サーバーは、Java プロセスの一部であり、 Java アプリケーションを実行し、サポートする Java 仮想マシン (JVM) を必要としています。 アプリケーション・サーバーの構成の一環として、 システムの JVM の使用を強化する設定を微調整することができます。
JVM は、Java ベースのアプリケーションの ランタイム実行環境を提供します。 WebSphere Application Server は、JVM ランタイム環境と Java ベースのサーバー・ランタイムの組み合わせです。 これは、異なる JVM プロバイダーの JVM 上で実行できます。 ご使用のアプリケーション・サーバーが稼働している JVM プロバイダーを判別するには、 WebSphere Application Server の app_server_root/java/bin ディレクトリーから java –fullversion コマンドを実行します。 また、ご使用のいずれかのサーバーの SystemOut.log を確認することもできます。アプリケーション・サーバーが始動すると、 Websphere Application Server は JVM プロバイダー情報を含む、JVM に関する情報をこのログ・ファイルに書き込みます。
一部の環境では、ランタイム・パフォーマンスではなく、WebSphere Application Server の開始パフォーマンスを最適化することがより重要です。 別の環境では、ランタイム・パフォーマンスを最適化することがより重要になります。 デフォルトで、IBM JVM はランタイム・パフォーマンスが最適化され、HotSpot ベース の JVM は開始パフォーマンスが最適化されています。
Java JIT コンパイラーは、開始およびランタイムのパフォーマンスが最適化されるかどうかに大きく影響します。 コンパイラーで使用される初期の最適化レベルは、クラス・メソッドのコンパイルにかかる時間と、 サーバーの開始にかかる時間に影響を与えます。 開始を速めるには、コンパイラーで使用される初期の最適化レベルを低くします。 つまり、クラス・メソッドが低い最適化レベルでコンパイルされるため、 アプリケーションのランタイム・パフォーマンスが低下する可能性があります。
再コンパイルがパフォーマンスを改善する可能性があるというコンパイラーの決定に基づき、 ランタイム実行中にコンパイラーがクラス・メソッドを再コンパイルする可能性があるため、 特定のランタイム・パフォーマンス・インパクト・ステートメントを提供するのは困難です。 最終的には、アプリケーションの継続期間がランタイムの低下に大きな影響を与えます。 実行期間が短いアプリケーションほど、メソッドが再コンパイルされる可能性が大きくなります。 実行時間が長いアプリケーションでは、メソッドが再コンパイルされる可能性が小さくなります。IBM JVM のデフォルト設定では、 初期コンパイルに高い最適化レベルが使用されます。 この振る舞いの変更が必要な場合は、以下の IBM JVM オプションを使用することができます。
-Xquickstart
この設定値は、IBM JVM が低い最適化レベルをクラス・メソッド・ コンパイルに使用する方法に影響します。ランタイム・パフォーマンスを遅くして、サーバーの開始を速めます。このパラメーターが 指定されていない場合、IBM JVM はデフォルトでコンパイルに高い初期最適化レベルを使用して開始します。 この設定は、サーバーの開始を遅くして、ランタイム・パフォーマンスを速めます。
デフォルト: | 高い初期コンパイラー最適化レベル |
推奨: | 高い初期コンパイラー最適化レベル |
使用法: | -Xquickstart は、サーバーの起動時間を速めることができます。 |
Sun の Hotspot 技術に基づいた JVM は、 最初に低い最適化レベルでクラス・メソッドをコンパイルします。 以下の JVM オプションを使用して、この振る舞いを変更します。
-server
Sun の Hotspot 技術に基づいた JVM は、 最初に低い最適化レベルでクラス・メソッドをコンパイルします。 これらの JVM は、単純なコンパイラーと最適化 JIT コンパイラーを使用します。通常は、単純な JIT コンパイラーが使用されます。 ただし、このオプションを使用すると最適化コンパイラーを使用することができます。 この変更によって、サーバーのパフォーマンスは大幅に向上しますが、 最適化コンパイラーが使用されるとサーバーのウォームアップに時間がかかります。
デフォルト: | 単純なコンパイラー |
推奨: | 最適化コンパイラー |
使用法: | -server は、最適化コンパイラーを使用可能にします。 |
この設定は、Java ヒープの初期サイズを制御します。 このパラメーターを適切に調整すると、ガーベッジ・コレクションのオーバーヘッドが削減され、 サーバー応答時間とスループットが改善されます。 アプリケーションによっては、このオプションのデフォルト設定は低すぎるため、多数の小さなガーベッジ・コレクションが発生します。
デフォルト: | 256 MB |
推奨: | ワークロードに固有ですが、デフォルトより大きい値にします。 |
使用法: | -Xms256m は初期ヒープ・サイズを 256 メガバイトに設定します。 |
この設定は、Java ヒープの最大サイズを制御します。 このパラメーターを適切に調整すると、ガーベッジ・コレクションのオーバーヘッドを削減でき、 サーバー応答時間とスループットが改善されます。 アプリケーションによっては、このオプションのデフォルト設定は低すぎるため、多数の小さなガーベッジ・コレクションが発生します。
デフォルト: | 512 MB |
推奨: | ワークロードに固有ですが、デフォルトより大きい値にします。 |
使用法: | -Xmx512m は、最大ヒープ・サイズを 512 メガバイトに設定します。 |
この設定は、IBM JVM で使用し、ラージ・ページの使用によってヒープを割り振ることができます。 ただし、この設定を使用する場合、ご使用のオペレーティング・システムが ラージ・ページをサポートするよう構成されている必要があります。 ラージ・ページを使用すると、ヒープ・メモリーの追跡に必要となる CPU オーバーヘッドを削減することができ、 より大きなヒープを作成することもできます。
オペレーティング・システムの調整についての詳細は、オペレーティング・システムの調整 を参照してください。
ヒープに指定する必要があるサイズは、時間経過に伴うヒープの使用量によって異なります。 ヒープ・サイズが頻繁に変化する場合は、Xms と Xmx のパラメーターに同じ値を指定すると、パフォーマンスが向上する可能性があります。
Java -X オプションを使用して、メモリー・オプションのリストを参照します。
gcpolicy を optthruput に設定すると、並行マークが使用不可になります。 アプリケーションの不安定な応答時間によって示される、一時停止に関する問題がない場合は、 このオプションを使用して、最良のスループットを得る必要があります。 gcpolicy を optavgpause に設定すると、そのデフォルト値で並行マークが使用可能になります。この設定は、 通常のガーベッジ・コレクションによって発生する、アプリケーションの不安定な応答時間を緩和します。 ただし、このオプションはスループット全体を減少させる可能性があります。
デフォルト: | optthruput |
推奨: | optthruput |
使用法: | Xgcpolicy:optthruput |
クラスのライブ・インスタンスが残されていない場合、デフォルトで、JVM はメモリーからクラスをアンロードしますが、 これはパフォーマンスを低下させることがあります。 クラス・ガーベッジ・コレクションをオフにすると、 同じクラスを複数回ロードおよびアンロードするオーバーヘッドが除去されます。
クラスが必要なくなった場合、そのクラスがヒープに占めていたスペースは通常、新規オブジェクトの作成に使用されます。 ただし、アプリケーションがクラスの新規インスタンスの作成による要求を処理し、 そのアプリケーションの要求が不定期に入って来る場合、 通常のクラス・ガーベッジ・コレクションは、前の要求側の終了後に、このクラスが属していたヒープ・スペースを 解放することによって、このクラスをクリーンアップします。 その結果、次の要求が来たときはクラスを再インスタンス化する必要があります。 この状態では、このオプションを使用して、クラスのガーベッジ・コレクションを使用不可にすることができます。
デフォルト: | クラス・ガーベッジ・コレクション使用可能 |
推奨: | クラス・ガーベッジ・コレクション使用不可 |
使用法: | Xnoclassgc はクラス・ガーベッジ・コレクションを使用不可にします。 |
Solaris プラットフォームでは、 WebSphere Application Server は IBM JVM ではなく Sun Hotspot JVM で稼働します。 Sun JVM のパフォーマンス最適化フィーチャーを利用するために、Sun JVM で正しいチューニング・パラメーターを使用することが重要です。
Sun HotSpot JVM では、 世代ガーベッジ・コレクションによって、最適なパフォーマンスを実現します。 以下のコマンド行パラメーターは、ガーベッジ・コレクションの調整に便利です。
Java ヒープは、古い (長期間) オブジェクトのセクションと 若いオブジェクトのセクションに分割されます。 若いオブジェクトのセクションは、新規オブジェクトが割り当てられるセクション (エデン) と、 使用中の新規オブジェクトが、古いオブジェクト (サバイバー・スペース) にプロモートされる前に、 最初の幾つかのガーベッジ・コレクションで存続しているセクションにさらに分割されます。 Survivor Ratio は、ヒープの若いオブジェクト・セクションでの、 サバイバー・スペースに対するエデンの比率です。 この設定を高くすると、アプリケーションでのオブジェクトの作成率を高くし、 オブジェクトの保持率を低くするよう JVM を最適化します。 WebSphere Application Server は、他のアプリケーションよりも中長期間のオブジェクトを生成するため、 この設定はデフォルトより低くする必要があります。
デフォルト: | 32 |
推奨: | 16 |
使用法: | -XX:SurvivorRatio=16 |
永続世代に予約されたヒープのセクションは、JVM のすべての反射データを保持します。 このサイズは、動的に多くのクラスをロードおよびアンロードするアプリケーションのパフォーマンスを最適化するために増やす必要があります。 これを 128 MB メガバイトに設定すると、ヒープのこの部分を増やすオーバーヘッドを除去します。
推奨: | 128 MB |
使用法: | XX:PermSize=128m は PermSize を 128 メガバイトに設定します。 |
この設定は、若い世代がヒープで消費することができるスペース量を制御します。 このパラメーターを適切に調整すると、ガーベッジ・コレクションのオーバーヘッドを削減でき、 サーバー応答時間とスループットが改善されます。 このデフォルト設定は通常は低すぎるため、多数の小さなガーベッジ・コレクションが発生します。 この設定値が高すぎると、JVM は主要な (フル) ガーベッジ・コレクションのみを実行することになります。 これらは通常、数秒かかり、サーバー全体のパフォーマンスに極めて有害な影響を及ぼします。 この状況を回避するには、この設定を全体のヒープ・サイズの半分以下に抑える必要があります。
デフォルト: | 2228224 バイト |
推奨: | 全ヒープ・サイズの約 1/4 |
使用法: | -Xmn256m はサイズを 256 メガバイトに設定します。 |
クラスのライブ・インスタンスが残されていない場合、デフォルトで、JVM はメモリーからクラスをアンロードしますが、 これはパフォーマンスを低下させることがあります。 クラス・ガーベッジ・コレクションをオフにすると、 同じクラスを複数回ロードおよびアンロードするオーバーヘッドが除去されます。
クラスが必要なくなった場合、そのクラスがヒープに占めていたスペースは通常、新規オブジェクトの作成に使用されます。 ただし、アプリケーションがクラスの新規インスタンスの作成による要求を処理し、 そのアプリケーションの要求が不定期に入って来る場合、 通常のクラス・ガーベッジ・コレクションは、前の要求側の終了後に、このクラスが属していたヒープ・スペースを 解放することによって、このクラスをクリーンアップします。 その結果、次の要求が来たときはクラスを再インスタンス化する必要があります。 この状態では、このオプションを使用して、クラスのガーベッジ・コレクションを使用不可にすることができます。
デフォルト: | クラス・ガーベッジ・コレクション使用可能 |
推奨: | クラス・ガーベッジ・コレクション使用不可 |
使用法: | Xnoclassgc はクラス・ガーベッジ・コレクションを使用不可にします。 |
Sun JVM の調整に関する追加情報については、「Performance Documentation for the Java HotSpot VM」を参照してください。
HP JVM では、 世代ガーベッジ・コレクションによって、最適なパフォーマンスを実現します。 以下のコマンド行パラメーターは、ガーベッジ・コレクションの調整に便利です。
この設定は、アプリケーションで短期間のオブジェクトを 多く生成するよう JVM を最適化します。 このパラメーターが指定されないと、JVM は通常、主要な (フル) ガーベッジ・コレクションを行います。 フル・ガーベッジ・コレクションは、数秒かかり、サーバー・パフォーマンスを大幅に低下させることがあります。
デフォルト: | off |
推奨: | on |
使用法: | -Xoptgc は最適化されたガーベッジ・コレクションを使用可能にします。 |
Java ヒープは、古い (長期間) オブジェクトのセクションと 若いオブジェクトのセクションに分割されます。 若いオブジェクトのセクションは、新規オブジェクトが割り当てられるセクション (エデン) と、 使用中の新規オブジェクトが、古いオブジェクト (サバイバー・スペース) にプロモートされる前に、 最初の幾つかのガーベッジ・コレクションで存続しているセクションにさらに分割されます。 Survivor Ratio は、ヒープの若いオブジェクト・セクションでの、 サバイバー・スペースに対するエデンの比率です。 この設定を高くすると、アプリケーションでのオブジェクトの作成率を高くし、 オブジェクトの保持率を低くするよう JVM を最適化します。 WebSphere Application Server は、他のアプリケーションよりも中長期間のオブジェクトを生成するため、 この設定はデフォルトより低くする必要があります。
デフォルト: | 32 |
推奨: | 16 |
使用法: | -XX:SurvivorRatio=16 |
永続世代に予約されたヒープのセクションは、JVM のすべての反射データを保持します。 このサイズは、動的に多くのクラスをロードおよびアンロードするアプリケーションのパフォーマンスを最適化するために増やす必要があります。 値 128 メガバイトを指定すると、ヒープのこの部分を増やすオーバーヘッドを除去します。
デフォルト: | 0 |
推奨: | 128 メガバイト |
使用法: | -XX:PermSize=128m は PermSize を 128 メガバイトに設定します。 |
デフォルトで、Java ヒープでは「遅延スワップ」が割り振られます。 これは、必要に応じてメモリーのページを割り振ることによりスワップ・スペースを節約しますが、 強制的に 4 KB ページが使用されます。 このメモリー割り振りは、大きなヒープ・システムの多数のページわたってこのヒープを広げることができます。 このコマンドは、「遅延スワップ」を使用不可にし、オペレーティング・システムが大きなメモリー・ページを 使用できるようにします。これにより、Java ヒープを構成するメモリーへのアクセスが最適化されます。
デフォルト: | off |
推奨: | on |
使用法: | -XX:+ForceMmapReserved は「遅延スワップ」を使用不可にします。 |
この設定は、若い世代がヒープで消費することができるスペース量を制御します。 このパラメーターを適切に調整すると、ガーベッジ・コレクションのオーバーヘッドを削減でき、 サーバー応答時間とスループットが改善されます。 このデフォルト設定は通常は低すぎるため、多数の小さなガーベッジ・コレクションが発生します。
デフォルト: | デフォルトなし |
推奨: | 全ヒープ・サイズの約 3/4 |
使用法: | -Xmn768m はサイズを 768 MB に設定します。 |
Java 仮想マシンの命令およびデータ・ページ・サイズを 64 MB に設定すると、 パフォーマンスを改善できます。
デフォルト: | 4 MB |
推奨: | 64 MB |
使用法: | 以下のコマンドを使用します。このコマンド出力により、現行オペレーティング・システムの、
実行可能なプロセスの特性が提供されます。
chatr +pi64M +pd64M /opt/WebSphere/ AppServer/java/bin/PA_RISC2.0/ native_threads/java |
クラスのライブ・インスタンスが残されていない場合、デフォルトで、JVM はメモリーからクラスをアンロードしますが、 これはパフォーマンスを低下させることがあります。 クラス・ガーベッジ・コレクションをオフにすると、 同じクラスを複数回ロードおよびアンロードするオーバーヘッドが除去されます。
クラスが必要なくなった場合、そのクラスがヒープに占めていたスペースは通常、新規オブジェクトの作成に使用されます。 ただし、アプリケーションがクラスの新規インスタンスの作成による要求を処理し、 そのアプリケーションの要求が不定期に入って来る場合、 通常のクラス・ガーベッジ・コレクションは、前の要求側の終了後に、このクラスが属していたヒープ・スペースを 解放することによって、このクラスをクリーンアップします。 その結果、次の要求が来たときはクラスを再インスタンス化する必要があります。 この状態では、このオプションを使用して、クラスのガーベッジ・コレクションを使用不可にすることができます。
デフォルト: | クラス・ガーベッジ・コレクション使用可能 |
推奨: | クラス・ガーベッジ・コレクション使用不可 |
使用法: | Xnoclassgc はクラス・ガーベッジ・コレクションを使用不可にします。 |
HP 仮想マシンの調整に関する追加情報については、「Java technology software HP-UX 11i」を参照してください。
-XX:SchedulerPriorityRange=SCHED_NOAGE -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.DevPollSelectorProvider -XX:-ExtraPollBeforeRead
詳しくは、調整の追加情報については、Java メモリーのチューニング・ヒント を参照してください。