ナビゲーションをスキップ

WebLogic Server パフォーマンス チューニング ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

Java 仮想マシン (JVM) のチューニング

Java 仮想マシン (JVM) は、マイクロプロセッサ上で Java クラス ファイルのバイト コードを実行する仮想の「実行エンジン」インスタンスです。JVM のチューニングは、WebLogic Server とアプリケーションのパフォーマンスに影響を与えます。

以下の節では、WebLogic Server 用の JVM チューニング オプションについて説明します。

 


JVM のチューニングの考慮事項

表 4-1 は、WebLogic Server における JVM のチューニングに関する一般的な考慮事項を示しています。

表 4-1 JVM のチューニングの一般的な考慮事項 

チューニング事項

参照情報

JVM のベンダおよびバージョン

WebLogic Server の動作が確認されているプロダクション JVM だけを使用すること。このリリースの WebLogic Server は、J2SE 5.0 準拠の JVM のみサポートする。

サポート対象のコンフィグレーション』は頻繁に更新され、さまざまなプラットフォームの最新の動作確認情報が示される。

ヒープ サイズおよびガベージ コレクションのチューニング

WebLogic Server のヒープ サイズ チューニングの詳細については、「JVM のヒープ サイズとガベージ コレクション」を参照。

ガベージ コレクションの方式の選択

システム メモリの管理に使用できるガベージ コレクションの方式は、アプリケーションによって異なる。詳細については、「ガベージ コレクションの方式の選択」を参照。

クライアント/サーバ JVM の混在

WebLogic Server では、クライアントとサーバ用に異なる JVM バージョンを使用したデプロイメントがサポートされている。『サポート対象のコンフィグレーション』でクライアントとサーバの JVM の組み合わせについて参照のこと。

UNIX スレッディング モデル

Solaris スレッディング モデルに関する選択は、Solaris 上の JVM のパフォーマンスに大きく影響する。モデル内で複数のスレッディング モデルと異なる同期方式を選択できるが、これは JVM によって異なる。

Sun Microsystems の Web サイトにある「Performance Documentation For the Java Hotspot Virtual Machine: Threading」を参照。

 


使用しているシステムに適した JVM

この節では Windows、UNIX、および Linux プラットフォーム用の Sun Microsystems J2SE 5.0 JVM について説明しますが、サーバサイド アプリケーション用に開発され、Intel アーキテクチャ向けに最適化された BEA JRockit JVM を使用すると、Java アプリケーションの信頼性、スケーラビリティ、管理容易性、柔軟性を向上できます。Windows および Linux プラットフォームで JRockit を使用する利点については、『JRockit JDK の紹介』を参照してください。

JVM の一般的な情報については、「Introduction to the JVM specification」を参照してください。JVM チューニングの関連情報へのリンクについては、「関連情報 : パフォーマンス ツールと情報」を参照してください。

他の JVM への変更

ドメインを作成するときに、そのコンフィグレーションのカスタマイズを選択すると、WebLogic Server がインストールした JDK のリストがコンフィグレーション ウィザードに表示されます。そのリストからドメインを実行する JVM を選択し、ウィザードはその選択に基づいて BEA 起動スクリプトをコンフィグレーションします。ドメインを作成した後で、使用する JVM を変更する場合は、「サーバを実行する JVM の変更」を参照してください。

 


JVM のヒープ サイズとガベージ コレクション

ガベージ コレクションは、Java ヒープ内の使用されていない Java オブジェクトを解放する JVM のプロセスです。Java ヒープは Java プログラムのオブジェクトが存在している場所であり、ライブ オブジェクト、デッド オブジェクト、およびフリー メモリのリポジトリです。実行中のプログラムでどのポインタからもアクセスされなくなると、オブジェクトは「ガベージ (廃棄物)」と見なされ、コレクションの対象となります。

JVM ヒープ サイズによって、ガベージ コレクションを行う頻度とその時間が決定されます。ガベージ コレクションの適切な実行頻度はアプリケーションによって異なるので、ガベージ コレクションの実際の時間と頻度を解析して調整する必要があります。大きいヒープ サイズを設定した場合、ガベージ コレクション全体は低速化しますが、実行頻度が低くなります。メモリのニーズに合わせてヒープ サイズを設定した場合、ガベージ コレクション全体は高速化しますが、実行頻度が高くなります。

ヒープ サイズのチューニングの目標は、WebLogic Server で所定の時間に処理できるクライアントの数を最大限に増やしつつ、JVM によるガベージ コレクションの実行時間を最小限に抑えることです。ベンチマーク時に最高のパフォーマンスを確保するには、大きいヒープ サイズ値を設定し、ベンチマークの実行中にガベージ コレクションが実行されないようにします。

ヒープ領域が不足している場合、次の Java エラーが表示されます。

java.lang.OutOfMemoryError <<no stack trace available>>
java.lang.OutOfMemoryError <<no stack trace available>>
Exception in thread "main"

ヒープ領域値を変更するには、「ヒープ サイズ値の指定」を参照してください。

ヒープ領域の不足を自動的に検出して、サーバの低メモリ状態を解決するよう WebLogic Server をコンフィグレーションするには、「低メモリ状態の自動的なロギング」を参照してください。

ガベージ コレクションの方式の選択

システム メモリの管理に使用するガベージ コレクションは、どの JVM を使用しているかに応じて複数の方式の中から選択できます。たとえば、特定のタイプのアプリケーションには、それに適したガベージ コレクションの方式があります。アプリケーションの負荷や、JVM によって使用されるガベージ コレクション アルゴリズムの違いを理解すると、ガベージ コレクションのコンフィグレーションを最適化できます。

それぞれの JVM のガベージ コレクション オプションの詳細については、以下のリンクを参照してください。

verbose ガベージ コレクションを使用したヒープ サイズの決定

HotSpot VM の verbose ガベージ コレクション オプション (verbosegc) を使用すると、ガベージ コレクションに費やされる時間とリソースを正確に測定できます。最も効率的なヒープ サイズを判断するには、診断を目的として verbose ガベージ コレクションを有効にし、出力をログ ファイルにリダイレクトします。

次に、この手順を簡単に示します。

  1. アプリケーション実行中に、最大の負荷をかけた状態で WebLogic Server のパフォーマンスをモニタします。
  2. -verbosegc オプションを使用して JVM の verbose ガベージ コレクション出力を有効にし、標準エラーおよび標準出力の両方をログ ファイルにリダイレクトします。
  3. リダイレクトすることにより、スレッド ダンプ情報が WebLogic Server の情報メッセージとエラー メッセージに関連してログに記録されるので、診断する際にログ ファイルがさらに役立ちます。

    たとえば、Windows および Solaris では次のように入力します。

    % java -ms32m -mx200m -verbosegc -classpath $CLASSPATH
    -Dweblogic.Name=%SERVER_NAME% -Dbea.home="C:\bea"
    -Dweblogic.management.username=%WLS_USER%
    -Dweblogic.management.password=%WLS_PW%
    -Dweblogic.management.server=%ADMIN_URL%
    -Dweblogic.ProductionModeEnabled=%STARTMODE%
    -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server
    >> logfile.txt 2>&1

    logfile.txt 2>&1 コマンドは、標準エラーと標準出力の両方をログ ファイルにリダイレクトします。

    HPUX では、次のオプションを使用して stderr stdout を 1 つのファイルにリダイレクトします。

    -Xverbosegc:file=/tmp/gc$$.out

    $$ は、Java プロセスのプロセス ID (PID) にマップされます。出力にはガベージ コレクションの実行時間を示すタイムスタンプが含まれているので、ガベージ コレクションの実行頻度を推測できます。

  4. 以下のデータ ポイントを解析します。
    1. ガベージ コレクションの実行頻度。weblogic.log ファイルで、ガベージ コレクション前後のタイム スタンプを比較します。
    2. ガベージ コレクションの実行時間。ガベージ コレクション全体の実行時間は 3 ~ 5 秒を上回ってはいけません。
    3. 平均メモリ占有量。つまり、各ガベージ コレクション実行後のヒープの状態です。ヒープの空きが常に 85% になる場合、ヒープ サイズを小さくしてもかまいません。
  5. Java HotSpot JVM 5.0 を使用している場合は、New 世代のヒープ サイズを設定します。
  6. ヒープ サイズ値の指定」および表 4-2 を参照してください。

    注意 : BEA WebLogic JRockit JVM の適切なヒープ サイズの設定については、『JRockit JVM チューニング ガイド』を参照してください。

  7. ヒープ サイズがシステムの使用可能な空き RAM より大きくならないようにします。
  8. ページがディスクに「スワップ」されない範囲で、できるだけ大きいヒープ サイズを設定します。システムの空き RAM の容量は、ハードウェアのコンフィグレーションと、そのマシン上で実行されているプロセスのメモリ要件によって異なります。システムの空き RAM の容量の決定については、システム管理者に問い合わせてください。

  9. システムがガベージ コレクションに費やす時間が長すぎる場合 (割り当てられた「仮想」メモリを RAM が処理できない場合)、ヒープ サイズを小さくします。
  10. 通常、使用可能な RAM (オペレーティング システムまたはその他のプロセスによって占有されない RAM) の 80% を JVM に割り当てます。

  11. 使用可能な空き RAM が大量に残っている場合は、そのマシンでより多くの WebLogic Server インスタンスを実行します。
  12. もう一度確認しますが、ヒープ サイズのチューニングの目標は、WebLogic Server で所定の時間に処理できるクライアントの数を最大限に増やしつつ、JVM によるガベージ コレクションの実行時間を最小限に抑えることです。

注意 : BEA JRockit JVM -Xgcreport オプションを使用してプログラムの終了時にガベージ コレクション レポートを出力する方法については、WebLogic JRockit のドキュメントを参照してください。

 


ヒープ サイズ値の指定

Java ヒープ サイズの値は、WebLogic Server インスタンスを起動するたびに指定する必要があります。ヒープ サイズ値は、java コマンドラインから指定するか、WebLogic Server 起動用に WebLogic 配布キットに付属しているサンプル起動スクリプトのデフォルト値を変更して指定します (「WebLogic 起動スクリプトを使用したヒープ サイズの設定」を参照)。

たとえば、java コマンドラインから WebLogic Server インスタンスを起動する場合、HotSpot VM サイズの値は次のように指定できます。

$ java -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=8 -Xms512m -Xmx512m

これらの値のデフォルト サイズはバイト単位で指定されます。KB (キロバイト) を示すには、値に「k」または「K」を付加します。同様に、MB (メガバイト) を示すには「m」または「M」を、GB (ギガバイト) を示すには「g」または「G」を付加します。上記の例では、New 世代および New 世代の最大ヒープ サイズに 128MB、JVM で実行している WebLogic Server インスタンスの最小および最大ヒープ サイズに 512MB を割り当てています。ヒープ サイズ オプションの詳細については、「Java ヒープ サイズのオプション」を参照してください。

WebLogic 起動スクリプトを使用したヒープ サイズの設定

WebLogic Server 配布キットには、サーバを起動するサンプル起動スクリプト、およびサーバを構築したり実行したりするための環境を設定するサンプル起動スクリプトが付属しています。

コンフィグレーション ウィザードを使用してドメインを作成した場合、WebLogic 起動スクリプトはそのドメインを指定した domain-name ディレクトリに格納されます。このディレクトリは、デフォルトでは BEA_HOME\user_projects\domain\domain-name となります。BEA_HOME は製品のインストール ディレクトリ、domain-name は選択したコンフィグレーション テンプレートで定義されているドメイン ディレクトリの名前です。コンフィグレーション ウィザードを使用したドメインの作成については、『コンフィグレーション ウィザードを使用した WebLogic ドメインの作成』の「新規 WebLogic ドメインの作成」を参照してください。

これらの起動スクリプトは、Java に渡されるデフォルト メモリ引数 (つまり、ヒープ サイズ) や JDK の位置などの環境変数を設定し、その後に WebLogic Server の引数を使用して JVM を起動します。WebLogic Server 起動スクリプトでは、デフォルト ヒープ サイズのパラメータが指定されます。したがって、実際の環境やアプリケーションに合わせてそれらのパラメータを変更する必要があります。起動スクリプトを修正して Java ヒープ サイズ オプションを設定する手順については、『サーバの起動と停止の管理』の「WebLogic Server インスタンスの Java オプションの指定」を参照してください。

Java ヒープ サイズのオプション

最高のパフォーマンスは、アプリケーションを個別にチューニングすることで実現されます。ただし、WebLogic Server の起動時に表 4-2 の Java HotSpot VM ヒープ サイズ オプションをコンフィグレーションすると、ほとんどのアプリケーションでパフォーマンスを向上させることができます。

これらのオプションは、使用するアーキテクチャおよびオペレーティング システムによって異なります。プラットフォーム別の JVM チューニング オプションについては、ベンダのマニュアルを参照してください。

表 4-2 Java ヒープ サイズ オプション 

タスク

オプション

推奨値

New 世代領域のヒープ サイズを設定する。

-XX:NewSize

この値は、1MB より大きい 1024 の倍数に設定する。一般に -XX:NewSize は、最大ヒープ サイズの 4 分の 1 のサイズになるように設定する。有効期間の短いオブジェクトが多い場合ほど、このオプションの値を大きくする。

プロセッサ数が増加するほど、New 世代領域を大きく設定する必要がある。メモリの割り当ては並列処理できるが、ガベージ コレクションは並列処理されない。

New 世代領域の最大ヒープ サイズを設定する。

-XX:MaxNewSize

この値は、1MB より大きい 1024 の倍数に設定する。

New 世代領域のヒープ サイズ比率を設定する。

-XX:SurvivorRatio

New 世代領域は、3 つのサブ領域、つまり Eden と、同じサイズの 2 つのサバイバル領域に分割される。

Eden とサバイバル領域の比率をコンフィグレーションする。この値は 8 に設定し、その後、ガベージ コレクションをモニタするようにする。

最小ヒープ サイズを設定する。

-Xms

メモリ割り当てプールの最小サイズを設定する。この値は、1MB より大きい 1024 の倍数に設定する。一般に、最小ヒープ サイズ (-Xms) は最大ヒープ サイズ (-Xmx) と同じ大きさに設定して、ガベージ コレクションを最小限に抑える。

最大ヒープ サイズを設定する。

-Xmx

メモリ割り当てプールの最大サイズを設定する。この値は、1MB より大きい 1024 の倍数に設定する。

注意 : WebLogic JRockit JVM の適切なヒープ サイズの設定については、『JRockit JVM チューニング ガイド』を参照してください。

 


IA32 プラットフォームでのスピンの有効化

Sun は、Windows IA32 プラットフォーム上の JDK 5.0 において、デフォルトのロック スピン動作を変更しました。JDK 5.0 リリースでは、ロック スピンがデフォルトで無効になっています。この変更は、特にロックの競合が多いアプリケーションにおいて、Windows/IA32 プラットフォーム上の WebLogic Server のパフォーマンスに影響を与える可能性があります。

このリリースでは、WebLogic Server の起動に使用する環境スクリプト内でスピンを明示的に有効にしています。スピンを有効にするには、以下の VM オプションを使用します。

-XX:+UseSpinning

 


低メモリ状態の自動的なロギング

WebLogic Server では、低メモリ状態をサーバで観察して自動的にログに記録できます。WebLogic Server では、ある特定の時間間隔で設定された回数だけ利用可能な空きメモリをサンプリングして低メモリが検出されます。各間隔の最後に、空きメモリの平均が記録され、それが次の間隔で得られた平均と比較されます。サンプル間隔の後に、ユーザがコンフィグレーションした量だけ平均が落ち込んだ場合、サーバは低メモリの警告メッセージをログ ファイルに記録し、サーバの状態を「warning」に設定します。

低メモリ状態をログに記録するには、次の手順を実行します。

  1. Administration Console の左ペインで、[環境サーバ] を展開します。
  2. [サーバの概要] ページで、低メモリ状態のログをコンフィグレーションするサーバ インスタンスを選択します。
  3. [コンフィグレーションチューニング] タブで、必要に応じて以下の設定を更新します。
  4. [低メモリ GC しきい値] - サーバ インスタンスが低メモリの警告をログに記録し、ヘルス状態を「警告」に変更するしきい値。

    [低メモリ サンプル サイズ] - サーバ インスタンスが [低メモリ時間間隔] の期間に空きメモリをサンプリングする回数。

    [低メモリ時間間隔] - サーバ インスタンスが空きメモリの平均値を測定する時間間隔 (秒単位)。

  5. [保存] をクリックします。
  6. サーバ インスタンスを再起動して、新しい低メモリ検出値を使用します。

 


ガベージ コレクションの手動による要求

Administration Console から完全なガベージ コレクションを手動で要求する必要がある場合があります。ガベージ コレクションを実行すると、JVM はヒープ内のすべてのライブ オブジェクトを頻繁に調べるため、コストがかかることに留意してください。

ガベージ コレクションを手動で要求するには、次の手順に従います。

  1. Administration Console の左ペインで、[環境サーバ] を展開します。
  2. [サーバの概要] ページで、ガベージ コレクションを要求するサーバ インスタンスを選択します。
  3. [モニタパフォーマンス] タブを展開します。
  4. [ガベージ コレクション] をクリックします。

 


スレッド スタックの要求

アプリケーションのチューニング中にスレッド スタックの表示が必要になる場合があります。

スレッド スタックを表示するには、次の手順に従います。

  1. Administration Console の左ペインで、[環境サーバ] を展開します。
  2. [サーバの概要] ページで、ガベージ コレクションを要求するサーバ インスタンスを選択します。
  3. [モニタパフォーマンス] タブを展開します。
  4. [スレッド スタックのダンプ] をクリックします。

 


Java HotSpot VM オプションの設定

標準の java コマンドライン オプションを使用すると、JVM のパフォーマンスを向上させることができます。これらのオプションの使い方は、使用するアプリケーションのコーディングによって異なります。コマンドライン オプションはプラットフォーム間で一貫性がありますが、プラットフォームによってはデフォルトが異なる場合もあります。

クライアント JVM とサーバ JVM の両方をテストすると、特定のアプリケーションに対してよりパフォーマンスの優れたオプションを調べることができます。Sun Microsystems の「Java HotSpot VM Options」には、Java HotSpot 仮想マシンのパフォーマンス特性に影響を与えるコマンドライン オプションと環境変数に関する情報が記述されています。

パフォーマンスに影響する可能性のあるその他の「非標準」VM オプションの概要については、「Windows、Solaris、および Linux の非標準の HotSpot VM オプション」を参照してください。

注意 : BEA JRockit JVM コマンドライン オプションを使用したパフォーマンスの向上の詳細については、『JRockit JVM チューニング ガイド』を参照してください。

Windows、Solaris、および Linux の標準の HotSpot VM オプション

標準の java オプションを使用して、Windows、Solaris、および Linux プラットフォームでのパフォーマンスを向上できます。これらのオプションは、現在の Java 実行時環境でサポートされており、HotSpot の将来のリリースでもサポートされる予定です。表 4-3 に示す標準オプションを java コマンドを使用して指定すると、WebLogic Server によって特定のバージョンの JVM が呼び出されます。

表 4-3 標準の Java HotSpot VM オプション

オプション

プラットフォーム

説明

-client

Windows

Solaris

Java HotSpot Client VM を選択する。これは Windows および Solaris のデフォルト オプション。

-server

Windows

Solaris

Linux

Java HotSpot Server VM を選択する。

-hotspot

Linux

Java HotSpot Client VM を選択する。これは Linux のデフォルト オプション。

標準の HotSpot VM オプションのその他の例については以下を参照してください。

J2SE 5.0 準拠の Java 仮想マシンのクライアントおよびサーバの実装に関する詳細については、Sun Microsystems の Java 仮想マシンに関するドキュメントを参照してください。

Windows、Solaris、および Linux の非標準の HotSpot VM オプション

非標準の Java オプションを使用しても、パフォーマンスを向上させることができます。これらのオプションの使い方は、使用するアプリケーションのコーディングによって異なります。コマンドライン オプションはプラットフォーム間で一貫性がありますが、プラットフォームによってはデフォルトが異なる場合もあります。非標準のコマンドライン オプションは、将来のリリースにおいて変更される可能性があります。

Windows、Solaris、および Linux 上の HotSpot VM でパフォーマンスを向上させる非標準オプションの例については以下を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次