Server用にJVMチューニング・オプションを構成する方法について説明します。Java仮想マシン(JVM)は、マイクロプロセッサ上でJavaクラス・ファイルのバイト・コードを実行する仮想の「実行エンジン」インスタンスです。Serverとアプリケーションのパフォーマンスに影響を与えます。ServerにおけるJVMのチューニングに関する一般的な考慮事項を示しています。Serverの動作が確認されている製品JVMだけを使用します。5.0準拠のJVMのみサポートします。Serverの新機能』のサポートされている構成に関する項を参照してください。Serverのヒープ・サイズ・チューニングの詳細は、「ガベージ・コレクション」を参照してください。ガベージ・コレクションの方式の選択システム・メモリーの管理に使用できるガベージ・コレクションの方式は、アプリケーションによって異なります。詳細は、「ガベージ・コレクションの方式の選択」を参照してください。Serverでは、クライアントとサーバー用に異なるJVMバージョンを使用したデプロイメントがサポートされています。Serverの新機能』のサポートされている構成に関する項を参照してください。UNIXスレッディング・モデルSolarisスレッディング・モデルに関する選択は、Solaris上のJVMのパフォーマンスに大きく影響します。モデル内で複数のスレッディング・モデルと異なる同期方式を選択できますが、これはJVMによって異なります。Threading」(http://java.sun.com/docs/hotspot/threads/threads.html)を参照してください。JDKの紹介を参照してください。JVMの一般情報については、http://java.sun.com/docs/books/vmspec/2nd-edition/html/Introduction.doc.html#3057にあるJVM仕様の概要を参照してください。ServerがインストールしたJDKのリストが構成ウィザードに表示されます。そのリストからドメインを実行するJVMを選択すると、ウィザードはその選択に基づいてOracle起動スクリプトを構成します。Serverサーバーの起動と停止の管理』のサーバーを実行するJVMの変更に関する項を参照してください。ガベージ・コレクションガベージ・コレクションは、Javaヒープ内の使用されていないJavaオブジェクトを解放するVMのプロセスです。次の項では、VMのガベージ・コレクションのチューニングに関する情報を示します。低メモリー状態の自動的なロギングガベージ・コレクションの手動によるリクエストスレッド・スタックのリクエストVMのヒープ・サイズとガベージ・コレクションJavaヒープは、Javaプログラムのオブジェクトが存在する場所です。ライブ・オブジェクト、デッド・オブジェクト、およびフリー・メモリーのリポジトリです。実行中のプログラムでどのポインタからもアクセスされなくなると、オブジェクトは「ガベージ(廃棄物)」と見なされ、コレクションの対象となります。ベスト・プラクティスとしては、ガベージ・コレクションに費やされる時間を、実行時間の5%以内にチューニングします。JVMヒープ・サイズによって、ガベージ・コレクションを行う頻度とその時間が決定されます。ガベージ・コレクションの適切な実行頻度はアプリケーションによって異なるので、ガベージ・コレクションの実際の時間と頻度を解析して調整する必要があります。大きいヒープ・サイズを設定した場合、完全ガベージ・コレクションは低速化しますが、実行頻度が低くなります。メモリーのニーズに合わせてヒープ・サイズを設定した場合、完全ガベージ・コレクションは高速化しますが、実行頻度が高くなります。Serverで所定の時間に処理できるクライアントの数を最大限に増やしつつ、JVMによるガベージ・コレクションの実行時間を最小限に抑えることです。ベンチマーク時に最高のパフォーマンスを確保するには、大きいヒープ・サイズ値を設定し、ベンチマークの実行中にガベージ・コレクションが実行されないようにします。ヒープ領域が不足している場合、次のJavaエラーが表示されます。"main"ヒープ領域値を変更するには、「ヒープ・サイズ値の指定」を参照してください。Serverを構成するには、「低メモリー状態の自動的なロギング」および「ヒープ・サイズ値の指定」を参照してください。ガベージ・コレクションの方式の選択システム・メモリーの管理に使用するガベージ・コレクションは、どのJVMを使用しているかに応じて複数の方式の中から選択できます。特定のタイプのアプリケーションには、それに適したガベージ・コレクションの方式があります。アプリケーションの負荷や、JVMによって使用されるガベージ・コレクション・アルゴリズムの違いを理解すると、ガベージ・コレクションの構成を最適化できます。それぞれのJVMのガベージ・コレクション・オプションの詳細については、次のリンクを参照してください。Machine」(http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html)を参照してください。1.4.1」(http://www.oracle.com/technetwork/java/index-jsp-138820.html)を参照してください。JDKで利用可能なガベージ・コレクション・スキームの詳細は、「JRocktメモリー管理システムの使用」(http://www.oracle.com/technetwork/middleware/jrockit/overview/index.html)を参照してください。steps」(http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,1604,00.html)を参照してください。verboseガベージ・コレクションを使用したヒープ・サイズの決定verboseガベージ・コレクション・オプション(verbosegc)を使用すると、ガベージ・コレクションに費やされる時間とリソースを正確に測定できます。効率的なヒープ・サイズを判断するには、診断を目的としてverboseガベージ・コレクションを有効にし、出力をログ・ファイルにリダイレクトします。次に、この手順を簡単に示します。Serverのパフォーマンスをモニターします。-verbosegcオプションを使用してJVMのverboseガベージ・コレクション出力を有効にし、標準エラーおよび標準出力の両方をログ・ファイルにリダイレクトします。Serverの情報メッセージとエラー・メッセージに関連してログに記録されるので、診断する際にログ・ファイルがさらに役立ちます。WindowsおよびSolarisでは次のように入力します。2>&1コマンドは、標準エラーと標準出力の両方をログ・ファイルにリダイレクトします。stdoutを1つのファイルにリダイレクトします。(PID)にマップされます。出力にはガベージ・コレクションの実行時間を示すタイムスタンプが含まれているので、ガベージ・コレクションの実行頻度を推測できます。次のデータ・ポイントを解析します。ガベージ・コレクションの実行頻度。weblogic.logファイルで、ガベージ・コレクション前後のタイム・スタンプを比較します。ガベージ・コレクションの実行時間。5秒を上回ってはいけません。各完全ガベージ・コレクション後にヒープがどのような状態になるかです。ヒープの空きが常に85%になる場合、ヒープ・サイズを小さくしてもかまいません。New世代のヒープ・サイズ(Sun)または保護領域のサイズ(JRockit)を参照してください。JVMヒープ・サイズのオプション」を参照してください。VMヒープ・サイズのオプション」を参照してください。ヒープ・サイズがシステムの使用可能な空きRAMより大きくならないようにします。ページがディスクに「スワップ」されない範囲で、できるだけ大きいヒープ・サイズを設定します。システムの空きRAMの容量は、ハードウェアの構成と、そのマシン上で実行されているプロセスのメモリー要件によって異なります。システムの空きRAMの容量の決定については、システム管理者に問い合わせてください。システムがガベージ・コレクションに費やす時間が長すぎる場合(割り当てられた仮想メモリーをRAMが処理できない場合)、ヒープ・サイズを小さくします。(オペレーティング・システムまたはその他のプロセスによって占有されないRAM)の80%をJVMに割り当てます。Serverインスタンスを実行します。Serverで所定の時間に処理できるクライアントの数を最大限に増やしつつ、JVMによるガベージ・コレクションの実行時間を最小限に抑えることです。包括的なガベージ・コレクション・レポートを出力するその他のオプションについては、JVMベンダーが提供している場合があります。JVMの-Xgcreportオプションを使用してプログラムの終了時に包括的なガベージ・コレクション・レポートを出力できます。http://docs.oracle.com/docs/cd/E13150_01/jrockit_jvm/jrockit/webdocs/index.htmlで、ガベージ・コレクション動作の表示に関する説明を参照してください。ヒープ・サイズ値の指定システム・パフォーマンスは、JVMで利用可能なJavaヒープのサイズによって大きく影響されます。この節では、ヒープ・サイズ値の定義に使用するコマンド・ライン・オプションについて説明します。Serverのインスタンスを起動するたびに指定する必要があります。Server起動用にWebLogic配布キットに付属しているサンプル起動スクリプトのデフォルト値を変更して指定します。VMヒープ・サイズのオプションヒープ・サイズのチューニングのヒント次の項では、VMヒープ・サイズのチューニングに関する一般的なガイドラインを示します。ヒープ・サイズは、VMによって使用される最大メモリー量が、利用可能な物理的なRAM量を超えないような値に設定する必要があります。この値を超えると、OSがページングを開始するため、パフォーマンスが大幅に低下します。VMでは、常にヒープ・サイズより多いメモリーが消費されます。クラスおよびメソッドの格納に必要なメモリー)が、ヒープ・サイズの設定の他に割り当てられます。世代別ガベージ・コレクション方式を使用する場合、保護領域のサイズは、合計Javaヒープ・サイズの半分を超えないようにする必要があります。本番環境では、ヒープを常に拡張したり縮小したりするために使用されるVMリソースを浪費しないように、最小ヒープ・サイズと最大ヒープ・サイズを同じ値に設定します。これは、New世代のヒープ・サイズ(Sun)または保護領域のサイズ(JRockit)にも適用されます。JVMヒープ・サイズのオプションJRockitでは、ヒープ・サイズのヒューリスティックな自動調整機能が提供されますが、この機能は、すべてのアプリケーションに最適ではありません。多くの場合、最高のパフォーマンスを引き出すには、各アプリケーションに対して次の表に示すヒープ・サイズ・オプションを調整し、VMをチューニングします。保護領域を設定する-Xns可能な限り、できるだけ大きな保護領域を確保しつつ、ガベージ・コレクションの休止時間を許容できる限り短くするように設定する必要があります。これは、アプリケーションで一時的なオブジェクトを大量に作成している場合に特に重要になります。保護領域の最大サイズは、最大ヒープ・サイズの95%を超えることはできません。ヒープ・サイズの初期値と最小値を設定する-Xms最小ヒープ・サイズ(-Xms)は最大ヒープ・サイズ(-Xmx)と同じ大きさに設定して、ガベージ・コレクションを最小限に抑えることが推奨されます。最大ヒープ・サイズを設定する-Xmx実データの量と比較して、最大ヒープ値を低めに設定すると、ガベージ・コレクションが頻繁に行われ、パフォーマンスが低下します。parallelJavaアプリケーションの実行のできるだけ早い段階で、適応性のある最適化を行います。-XXaggressive:memoryこれを行うために、ボトルネック・ディテクタが最初は高い頻度で実行され、その後、実行頻度は徐々に低くなります。このオプションを指定すると、JRockitは利用可能なメモリーを積極的に使うようになります。VMヒープ・サイズの値は次のように指定できます。-Xmx512mこれらの値のデフォルト・サイズはバイト単位で指定されます。(キロバイト)を示すには、値に「k」または「K」を付加します。(ギガバイト)を示すには「g」または「G」を付加します。Serverインスタンスの最小および最大ヒープ・サイズに512MBのメモリーを割り当てています。JVMのチューニングに関する説明を参照してください。VMのパフォーマンスを向上するその他のコマンド・ライン・オプションが用意されています。詳細情報については、http://docs.oracle.com/docs/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/index.htmlで、コマンド・ライン・リファレンスを参照してください。VMヒープ・サイズのオプション最高のパフォーマンスは、アプリケーションを個別にチューニングすることで実現されます。VMヒープ・サイズ・オプションを構成すると、ほとんどのアプリケーションでパフォーマンスを向上させることができます。これらのオプションは、使用するアーキテクチャおよびオペレーティング・システムによって異なります。プラットフォーム別のJVMチューニング・オプションについては、ベンダーのドキュメントを参照してください。Javaヒープ・サイズ・オプションタスクオプション説明New世代領域のヒープ・サイズを設定する-XX:NewSize一般に-XX:NewSizeは、ヒープ・サイズの4分の1のサイズになるように設定します。有効期間の短いオブジェクトが多い場合ほど、このオプションの値を大きくします。プロセッサ数が増加するほど、New世代領域を大きく設定する必要があります。メモリーの割当ては並列処理できますが、ガベージ・コレクションは並列処理されません。New世代領域の最大ヒープ・サイズを設定する-XX:MaxNewSizeNew世代領域のヒープ・サイズの最大サイズを設定します。New世代領域のヒープ・サイズ比率を設定する-XX:SurvivorRatioNew世代領域は、3つのサブ領域、つまりEdenと、同じサイズの2つのサバイバル領域に分割されます。Edenとサバイバル領域の比率を構成します。この値は8に設定し、その後、ガベージ・コレクションをモニターするようにします。ヒープ・サイズの初期値を設定する-Xms一般的なルールとしては、ガベージ・コレクションを最小限にするために、ヒープ・サイズの初期値(-Xms)をヒープ・サイズの最大値(-Xmx)と等しく設定します。最大ヒープ・サイズを設定する-Xmxヒープ・サイズの最大サイズを設定します。-XX:+AggressiveHeaphttp://java.sun.com/docs/hotspot/ism.htmlを参照してください。VMヒープ・サイズの値は次のように指定できます。-Xmx512mこれらの値のデフォルト・サイズはバイト単位で指定されます。(キロバイト)を示すには、値に「k」または「K」を付加します。(ギガバイト)を示すには「g」または「G」を付加します。Serverインスタンスの最小および最大ヒープ・サイズに512MBを割り当てています。VMのその他のオプションVMのパフォーマンスを向上させるその他の標準および非標準のコマンド・ライン・オプションが用意されています。これらのオプションの使い方は、使用するアプリケーションのコーディングによって異なります。クライアントJVMとサーバーJVMの両方をテストすると、特定のアプリケーションに対してよりパフォーマンスの優れたオプションを調べることができます。HotSpot仮想マシンのパフォーマンス特性に影響を及ぼすコマンドライン・オプションと環境変数の詳細は、http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.htmlを参照してください。VM用標準オプション(http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html)。VM用標準オプション(http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/java.html)。Machineのドキュメント(http://docs.oracle.com/javase/1.5.0/docs/guide/vm/index.html)に記載されています。Serverでは、サーバーによって監視した低メモリー状態を自動的にログに記録できます。Serverは、使用可能な空きメモリーをある時間間隔内に一定回数サンプリングし、低メモリーを検出します。各間隔の経過時に空きメモリーの平均がログに記録され、次の間隔で取得した平均と比較されます。サンプルの間隔の経過時の平均がユーザーが構成した値より低い場合、サーバーは低メモリー警告をログ・ファイルに記録し、サーバーのヘルス状態を「警告」に設定します。Server管理コンソール・ヘルプの低メモリー状態のロギングに関する項を参照してください。ガベージ・コレクションの手動によるリクエスト管理コンソールから完全ガベージ・コレクションを手動でリクエストする必要がある場合があります。その場合、JVMがヒープ内のすべての有効なオブジェクトを調べることが多くあるため、ガベージ・コレクションに対してコストがかかることに注意してください。Server管理コンソール・ヘルプのガベージ・コレクションの手動によるリクエストに関する項を参照してください。スレッド・スタックのリクエストアプリケーションをチューニングするときに、スレッド・スタックを表示する必要がある場合があります。Server管理コンソール・ヘルプのスレッド・スタックの表示に関する項を参照してください。IA32プラットフォームでのスピンの有効化マルチプロセッサ・システム上でロックの競合が激しい高負荷のアプリケーションを実行している場合、スピンを使用してパフォーマンスの向上を試みることができます。このオプションを使用すると、スリープ状態に入る前に、短時間ロックをスピンすることができます。5.0において、デフォルトのロック・スピン動作を変更しました。5.0リリースでは、ロック・スピンがデフォルトで無効になっています。Serverの起動に使用する環境スクリプト内でスピンを明示的に有効にしています。スピンを有効にするには、次のVMオプションを使用します。VMでは、様々なロックに対するスピンが自動的に調整されるため、このパラメータを設定する必要はありません。reserved.法律上の注意点ライブラリ。