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

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

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

WebLogic Server のチューニング

以下の節では、WebLogic Server をアプリケーションのニーズに合わせてチューニングする方法について説明します。

 


WebLogic Server を起動するための Java パラメータの設定

Java パラメータの値は、WebLogic Server を起動するたびに指定する必要があります。weblogic.Server コマンドを使用してコマンドラインから行うと、この作業を単純化できます。ただし、コマンドラインから WebLogic Server を起動するために必要な引数は長くなる場合があり、エラーが発生しやすくなるので、コマンドをスクリプトに組み込むことをお勧めします。このプロセスを単純化するため、WebLogic 配布キットに付属するサンプル スクリプトのデフォルト値を変更して WebLogic Server を起動することもできます。詳細については、「WebLogic Server インスタンスの Java オプションの指定」を参照してください。

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

それらのスクリプトのいくつかのデフォルト Java 値は、実際の環境やアプリケーションに合わせて修正する必要があります。これらのファイル内で重要なパフォーマンス チューニング パラメータは、JAVA_HOME パラメータと Java ヒープ サイズ パラメータです。

 


パフォーマンス関連のコンフィグレーション パラメータの設定

WebLogic Server のコンフィグレーション ファイル (config.xml) には、実際の環境やアプリケーションに合わせて細かくチューニングできるパフォーマンス関連の多くの要素があります。これらのパラメータをシステム要件に基づいてチューニングすることで、デフォルト設定のまま実行する場合に比べ、単一ノードのパフォーマンスおよびアプリケーションのスケーラビリティ特性を大きく向上させることができます。

WebLogic Server ドメインでは、管理サーバのホスト マシン上にあるコンフィグレーション ファイルが WebLogic MBean 属性値の永続ストレージを提供します。管理サーバは、サーバ インスタンスおよびシステム管理ツールとのやり取りの中心として機能します。ドメインには、管理対象サーバと呼ばれる追加の WebLogic Server インスタンスを含めることもできます。管理対象サーバは、主にアプリケーションへのサービスの提供に使用します。

管理サーバを起動すると、ドメイン コンフィグレーション ファイルが読み込まれ、管理 MBean のデフォルトの属性値がコンフィグレーション ファイル内の属性値でオーバーライドされます。システム管理ツール (コマンドライン インタフェースまたは Administration Console) を使用して属性値を変更するたびに、その値は適切な管理 MBean に格納され、コンフィグレーション ファイルに書き込まれます。

システム管理インフラストラクチャの詳細については、『WebLogic Server のコンフィグレーションと管理』の「WebLogic Server システム管理の概要」を参照してください。

WebLogic Server システム管理の概要

表  4-1 に、サーバのパフォーマンスに影響を与えるconfig.xml ファイルのパラメータを示します。

表 4-1 パフォーマンス関連の config.xml 要素 

要素

属性

コンソール フィールド

詳細情報

Server

NativeIOEnabled

[ネイティブ IO を有効化]

WebLogic Server 「ネイティブ IO」パフォーマンス パックの使い方」を参照。

ExecuteQueue

ThreadCount

[スレッド数]

デフォルトの実行キュー スレッドのチューニング」を参照。

ExecuteQueue

QueueLength

QueueLengthThresholdPercent

ThreadsIncrease

ThreadsMaximum

Thread Priority

[キューの長さ]

[キューの長さのしきい値比率]

[スレッド数の増分]

[最大スレッド数]

[スレッド優先順位]

オーバーフロー条件に対する実行キューのチューニング」を参照。

Server

StuckThreadMaxTime

StuckThreadTimerInterval

[スタック スレッド最大時間]

[スタック スレッド タイマ間隔]

実行スレッドの検出動作のチューニング」を参照。

Server

ThreadPoolPercentSocketReaders

[ソケット リーダー]

ソケット リーダーとしての実行スレッドの割り当て」を参照。

Server

AcceptBacklog

[バックログを受け入れ]

接続バックログのバッファリングのチューニング」を参照。

JDBCConnectionPool

InitialCapacity

MaxCapacity

[初期容量]

[最大容量]

JDBC 接続プールによるパフォーマンスの向上」を参照。

JDBCConnectionPool

StatementCacheSize

[Statement キャッシュ サイズ]

Prepared Statement と Callable Statement のキャッシュ」を参照。

 


開発モードとプロダクション モードのデフォルトのチューニング値

ドメインを使用する環境として、開発環境またはプロダクション環境のどちらかを指定できます。WebLogic Server では、指定した環境の種類に応じて、各種サービスのデフォルト値に異なる値が使用されます。

表  4-2 に、開発起動モードとプロダクション起動モードで異なるパフォーマンス関連のコンフィグレーション パラメータを示します。

表 4-2 開発起動モードおよびプロダクション起動モードのデフォルトのチューニング値

チューニング パラメータ

開発モードのデフォルト

プロダクション モードのデフォルト

実行キュー : ThreadCount

15 スレッド

25 スレッド

JDBC 接続プール : MaxCapacity

15 接続

25 接続

この『WebLogic Server パフォーマンス チューニング ガイド』で示すデフォルトのチューニング値は、WebLogic Server インストール時のデフォルトの起動モードである「開発モード」のデフォルト値です。開発起動モードからプロダクション起動モードへの切り替えについては、Administration Console オンライン ヘルプの「実行時モードの変更」を参照してください。

開発起動モードとプロダクション起動モードの違いについては、『コンフィグレーション ウィザードの使い方』の「コンフィグレーションの起動モードの相違点」を参照してください。

 


WebLogic Server 「ネイティブ IO」パフォーマンス パックの使い方

ベンチマークでは、WebLogic Server インスタンスのホスト マシンでネイティブ パフォーマンス パックを使用したときにパフォーマンスが大きく向上することが示されています。パフォーマンス パックでは、プラットフォーム用に最適化されたネイティブのソケット マルチプレクサを使用して、サーバのパフォーマンスを向上させています。たとえば、ネイティブ ソケット リーダー マルチプレクサ スレッドは独自の実行キューを持ち、デフォルトの実行キューからスレッドを借用することがありません。その分、自由になったデフォルトの実行スレッドをアプリケーションの処理に使用できることになります。

ただし、ホスト マシンで pure-Java ソケット リーダー実装を使用しなければならない場合でも、サーバ インスタンスおよびクライアント マシンごとにソケット リーダー スレッドの数を適切にコンフィグレーションすることによって、ソケット通信のパフォーマンスを向上させることができます。

パフォーマンス パックを使用できるプラットフォーム

現時点でパフォーマンス パックが使用可能な、サポートされているプラットフォームを確認するには、次の手順を行います。

  1. 動作が確認されているコンフィグレーションのリストから、対象のプラットフォームのリンクをクリックします。
  2. 動作確認されているプラットフォームのページには、サポートされている各 WebLogic Server リリース (サービスパックを含む) の情報が表形式で示されています。各リリースの表には、そのリリースにパフォーマンス パックが「付属」しているかどうかを示す「パフォーマンス パック」項目があります。

  3. パフォーマンス パックの情報を確認するには、ページの上部で対象となる WebLogic Server リリースのリンクをクリックして対応する表を調べるか、またはブラウザの [編集|このページの検索] を使用して、ページ内にある「パフォーマンス パック」という文字列をすべて検索します。

パフォーマンス パックの有効化

配布キットと共に出荷されている config.xml では、ネイティブ パフォーマンス パックの使用がデフォルトで有効になっています。この設定をコンフィグレーション ファイルで確認するには、Server 要素の NativeIOEnabled 属性が「true」(NativeIOEnabled=true) に設定されているかどうかをチェックします。

パフォーマンス パックが有効になっているかどうかは、Administration Console を使用して確認することもできます。その場合は次の手順を行います。

  1. 管理サーバが起動していない場合は、起動します。
  2. ドメインの Administration Console にアクセスします。
  3. 左ペインの [サーバ] ノードを展開して、ドメインでコンフィグレーションされたサーバを表示します。
  4. コンフィグレーションするサーバ インスタンスの名前をクリックします。
  5. [コンフィグレーション|チューニング] タブを選択します。
  6. [ネイティブ IO を有効化] チェック ボックスがチェックされていない場合はチェックします。
  7. [適用] をクリックします。
  8. サーバを再起動します。

 


デフォルトの実行キュー スレッドのチューニング

config.xml ファイルの ExecuteQueue 要素の ThreadCount 属性の値は、実行キューを使用するアプリケーションで実行可能な同時処理の数と同じです。処理が WebLogic Server のインスタンスに渡されると、その処理は実行キューに置かれます。 次に、この処理は 1 つのスレッドに割り当てられて実行されます。スレッドはリソースを消費するため、この属性は注意して取り扱う必要があります。値を不必要に大きくすると、パフォーマンスが低下する可能性があります。

デフォルトでは、新しい WebLogic Server インスタンスには、weblogic.kernel.default という開発モードの実行キューがコンフィグレーションされています。この実行キューのスレッド数は 15 です。さらに、WebLogic Server には、あらかじめコンフィグレーションされた次の 2 つのキューが提供されています。

  • weblogic.admin.HTTP - このキューは、管理サーバのみにあり、Administration Console との通信用に予約されている (再コンフィグレーション不可)。
  • weblogic.admin.RMI - このキューは、管理サーバと管理対象サーバの両方にあり、管理トラフィック用に予約されている (再コンフィグレーション不可)。

追加の実行キューをコンフィグレーションし、それらにアプリケーションを割り当てない限りは、Web アプリケーションおよび RMI オブジェクトでは weblogic.kernel.default が使用されます。

注意 : ネイティブ パフォーマンス パックがプラットフォームで使用されていない場合は、パフォーマンスを最適化するために、実行キューのスレッドのデフォルト数とソケット リーダーとして機能するスレッドの割合をチューニングする必要があります。詳細については、「ソケット リーダーとしての実行スレッドの割り当て」を参照してください。

デフォルト スレッド数の変更

デフォルト実行キューにスレッドを増やしたからといって、必ずしもより多くの作業を処理できるわけではありません。スレッドを増やした場合でも、依然としてプロセッサの処理能力による制約を受けます。スレッドはメモリを消費するので、ThreadCount 属性の値を不必要に大きくすると、パフォーマンスが低下する可能性があります。実行スレッドを大きくすると、メモリの使用量が大きくなり、コンテキストの切り替えが増加し、パフォーマンスが低下する可能性があります。

ThreadCount 属性の値は、アプリケーションが実行する処理のタイプによって大きく異なります。たとえば、使用しているクライアント アプリケーションが軽量で、その処理の多くをリモート呼び出しを介して行う場合、そのクライアント アプリケーションが接続に費やす時間は多くの処理をクライアントサイドで行うクライアント アプリケーションより長くなり、その結果としてスレッド数の値をより大きくしなければならなくなります。

デフォルトの 15 (開発モード) または 25 (プロダクション モード) を超えるスレッドを使用する必要がない場合は、この属性の値を変更しないようにします。一般に、アプリケーションが応答に時間のかかるデータベース呼び出しを行う場合は、応答が早く時間のかからない呼び出しを行うアプリケーションより多くの実行スレッドが必要となります。 後者のケースでは、実行スレッドの数を減らすとパフォーマンスが向上します。

デフォルト スレッド数を変更するシナリオ

実行キューの理想的なスレッド数を決めるには、キュー内のすべてのアプリケーションが最大負荷で動作しているときにキューのスループットをモニタします。キューのスレッド数を増やし、キューのスループットが最適になるまで負荷テストを繰り返します。あるポイントまでスレッドの数を増やしていくと、コンテキストの切り替えが増えすぎて、キューのスループットが低下し始めるので注意してください。

注意 : WebLogic Server Administration Console には、サーバのすべての実行キューの累積スループットが表示されます。このスループット値を表示するには、「デフォルト スレッド数の変更」の手順 1 ~ 6 を行ってください。

表  4-3 に、WebLogic Server ドメインで使用できる CPU 数との関係で使用可能なスレッドを調整するためのデフォルトのシナリオを示します。 これらのシナリオも、WebLogic Server が最大負荷で動作し、すべてのスレッド リクエストがデフォルト実行キューを使用して満たされることを前提としています。追加の実行キューをコンフィグレーションして、特定のキューにアプリケーションを割り当てる場合は、結果をプールごとにモニタします。

表 4-3 デフォルト スレッド数を変更するシナリオ

条件

結果

対策

スレッド数 < CPU の数

以下の場合はスレッド数が少なすぎる。

  • 実行できる処理があるのに、CPU が処理を待機している。

  • 100% の CPU 使用率を実現できない。

スレッド数を増加させる。

スレッド数 = CPU の数

理論的には理想的だが、まだ CPU の使用率が低い。

スレッド数を増加させる。

スレッド数 > CPU の数 (スレッド数が適度に多い)

実用上は理想的であり、適度なコンテキストの切り替え数と高い CPU 使用率が実現される。

スレッド数をさらにチューニングして、パフォーマンスの結果を比較する。

スレッド数 > CPU の数 (スレッド数が過度に多い)

コンテキストの切り替えが増えすぎて、パフォーマンスが大幅に低下する。

スレッド数を減らせばパフォーマンスは向上する。

CPU と同じ数にスレッド数を減らしてから、確認された「スタック」スレッドの数だけ追加する。

たとえば、プロセッサが 4 つの場合は、スタック スレッドの数に加えて 4 つのスレッドを同時に実行できる。このため、実行スレッド数は、4 とスタック スレッド数を足した数が望ましい。

スタック スレッドの数を確認するには、「実行スレッドの検出動作のチューニング」を参照。

注意 : 以上のことは、アプリケーションに大きく依存する。 たとえば、アプリケーションがスレッドをブロックする時間によっては、上の公式が当てはまらない場合もある。

デフォルト スレッド数の変更

Administration Console でデフォルト実行キューのスレッド数を変更するには、次の手順を行います。

  1. 管理サーバが起動していない場合は、起動します。
  2. ドメインの Administration Console にアクセスします。
  3. 左ペインの [サーバ] ノードを展開して、ドメインでコンフィグレーションされたサーバを表示します。
  4. コンフィグレーションする実行キューを含むサーバ インスタンスの名前を右クリックし、ポップアップ メニューで [実行キューを表示] を選択して変更可能な実行キューの表を表示します。
  5. 注意 : 変更できるのは、サーバのデフォルト実行キューまたはユーザ定義の実行キューだけです。

  6. [名前] カラムで、デフォルト実行キューの名前をクリックして、変更する実行キューの [コンフィグレーション] タブを表示します。
  7. 必要に応じて [スレッド数] の値を増減します。
  8. [適用] をクリックして変更を保存します。
  9. 選択したサーバを再起動して、新しい実行キュー設定を有効にします。

実行キューへのアプリケーションの割り当て

デフォルト実行キューをコンフィグレーションして、すべての WebLogic Server アプリケーションに対して最適な数のスレッドを提供することができます。また、複数の実行キューをコンフィグレーションすると、重要なアプリケーションをより詳細に制御することができます。複数の実行キューを使用することにより、WebLogic Server の負荷に関係なく、選択したアプリケーションが固定数の実行スレッドに確実にアクセスできるようになります。コンフィグレーションされた実行キューへのアプリケーションの割り当てに関する詳細については、「実行キューによるスレッド使用の制御」を参照してください。

ソケット リーダーとしての実行スレッドの割り当て

ソケットの最適なパフォーマンスを実現するには、WebLogic Server インスタンスのホスト マシン上では、pure-Java 実装ではなくネイティブのソケット リーダー実装を使用することをお勧めします (「WebLogic Server 「ネイティブ IO」パフォーマンス パックの使い方」を参照)。ただし、ホスト マシンで pure-Java ソケット リーダー実装を使用しなければならない場合でも、サーバ インスタンスおよびクライアント マシンごとにソケット リーダー スレッドとして機能する実行スレッドの数を適切にコンフィグレーションすることによって、ソケット通信のパフォーマンスを向上させることができます。

ThreadPoolPercentSocketReaders 属性は、ソケットからメッセージを読み込む実行スレッドの割合の最高値を設定します。この属性の最適値は、アプリケーションによって異なります。デフォルト値は 33、有効範囲は 1 ~ 99 です。

実行スレッドをソケット リーダー スレッドとして割り当てると、サーバがクライアント リクエストを受け入れる速度と能力が向上します。重要なのは、ソケットからメッセージを読み込む実行スレッドの数と、サーバでタスクを実際に実行するスレッド数のバランスを取ることです。

サーバ インスタンスのソケット リーダー スレッド数の設定

Administration Console を使用してソケットからメッセージを読み込む実行スレッドの割合の最高値を設定するには、次の手順を行います。

  1. 管理サーバが起動していない場合は、起動します。
  2. ドメインの Administration Console にアクセスします。
  3. 左ペインの [サーバ] ノードを展開して、ドメインでコンフィグレーションされたサーバを表示します。
  4. コンフィグレーションするサーバの名前をクリックします。
  5. [コンフィグレーションチューニング] タブを選択します。
  6. [ソケット リーダー] 属性フィールドで Java リーダー スレッドの割合を編集します。Java ソケット リーダーの数が、合計実行スレッド数の割合として計算されます。合計実行スレッド数は、実行キューの [スレッド数] フィールドに表示されます。
  7. 変更を適用します。

クライアント マシンでのソケット リーダー スレッド数の設定

クライアント マシン上では、クライアントを実行する JVM 内で使用できるソケット リーダー スレッドの数をコンフィグレーションできます。ソケット リーダーを指定するには、クライアントの java コマンドラインで以下のパラメータを定義します。

-Dweblogic.ThreadPoolSize=value
-Dweblogic.ThreadPoolPercentSocketReaders=value

オーバーフロー条件に対する実行キューのチューニング

デフォルトの実行キューやユーザ定義の実行キューでオーバーフローになりそうな条件を検出し、必要に応じて対応するように WebLogic Server をコンフィグレーションできます。WebLogic Server は、キューのサイズがユーザ定義の最大サイズにおけるパーセンテージに達した場合、キューにオーバーフロー条件の可能性があることを認識します。 しきい値に達すると、サーバは自己の状態を「warning」に変更し、必要に応じて、キュー内の未処理の作業を追加のスレッドに割り当ててそのサイズを軽減します。

キューのオーバーフロー条件を自動的に検出したり、対処したりするには、以下の項目をコンフィグレーションします。

  • サーバがオーバーフロー条件を示すしきい値。この値は、コンフィグレーションされた実行キューのサイズのパーセンテージとして設定します (QueueLength 値)。
  • オーバーフロー条件が検出されたときに実行キューに追加されるスレッドの数。これらの追加スレッドは、キューのサイズを、通常の動作サイズまで減らすよう機能します。
  • キューに対して使用できる最大スレッド数。特に、スレッドの最大数を設定することで、サーバがオーバーロード条件への対応のために過剰なスレッド数を割り当てることを防ぎます。

WebLogic Server Administration Console を使用して実行キューをチューニングするには、次の手順に従います。

  1. 管理サーバが起動していない場合は、起動します。
  2. ドメインの Administration Console にアクセスします。
  3. 左ペインの [サーバ] ノードを展開して、ドメインでコンフィグレーションされたサーバを表示します。
  4. コンフィグレーションする実行キューを含むサーバ インスタンスの名前を右クリックし、ポップアップ メニューで [実行キューを表示] を選択して変更可能な実行キューの表を表示します。
  5. 注意 : 変更できるのは、サーバのデフォルト実行キューまたはユーザ定義の実行キューだけです。

  6. [名前] カラムで、コンフィグレーションするデフォルト実行キューの名前 (またはユーザ定義の実行キュー) をクリックします。
  7. 選択したキューに対するオーバーフロー条件をサーバ インスタンスがどのように検出するかを指定するには、実行キューの [コンフィグレーション] タブで以下の属性を変更します。
    • [キューの長さ] : サーバがキューに保持できる同時リクエストの最大数を指定します。デフォルトの 65536 は非常に大きな数です。キューの未処理のリクエストがこの最大値に達することはほとんどありません。[キューの長さ] は常にデフォルトの 65536 エントリのままにします。
    • [キューの長さのしきい値比率] : サーバがキューのオーバーフロー条件を示す前に到達する Queue Length サイズのパーセンテージ (1 ~ 99) を入力します。しきい値のパーセンテージ以下の実際のキューの長さはすべて通常と見なされ、しきい値のパーセンテージを超えるサイズはオーバーフローを示します。 デフォルトでは、[キューの長さのしきい値比率] は 90% に設定されます。
    • [スレッド優先順位] : キューに関連付けられたスレッドの優先順位を指定します。デフォルトでは、[スレッド優先順位] は 5 に設定されています。
  8. このサーバが、選択したキューに対するオーバーフロー条件にどのように対応するかを指定するには、次の属性を変更します。
    • [スレッド数の増分] : WebLogic Server がオーバーフロー条件を検出したときにこの実行キューに追加するスレッドの数を入力します。ゼロ スレッド (デフォルト) を指定した場合、サーバは実行キューのオーバーフロー条件に対して自己の状態を「warning」に変更しますが、追加スレッドを割り当てて負荷を軽減することはありません。
  9. 選択したキューに追加できる最大スレッド数を制限するには、次の属性を変更します。
    • [最大スレッド数] : この実行キューが持つことのできる最大スレッド数を指定します。この値によって、WebLogic Server が継続的なオーバーフロー条件に対してキュー内に過剰な数のスレッドを作成することを防ぎます。デフォルトでは、[最大スレッド数] は 400 に設定されています。
  10. [適用] をクリックして変更を保存します。
  11. 選択したサーバを再起動して、新しい実行キュー設定を有効にします。

実行スレッドの検出動作のチューニング

WebLogic Server は、実行キューのスレッドが「スタック」状態になるとこれを自動的に検出します。スタック スレッドは現在の作業を終了したり新しい作業を承認したりできないため、サーバはスタック スレッドを診断するたびに、メッセージのロギングを行います。実行キューのすべてのスレッドがスタック状態になった場合、サーバは実行キューに基づいて自己の状態を「warning」または「critical」に変更します。

  • デフォルト キューのすべてのスレッドがスタック状態になった場合、サーバは自己の状態を「critical」に変更します (状態が「critical」の場合にサーバを自動的に停止し、再起動するようノード マネージャ アプリケーションを設定できます。 詳細については、『WebLogic Server のコンフィグレーションと管理』の「ノード マネージャの機能」を参照してください。
  • weblogic.admin.HTTPweblogic.admin.RMI またはユーザ定義の実行キューのすべてのスレッドがスタック状態になった場合、サーバは自己の状態を「warning」に変更します。

WebLogic Server は、設定した期間、作業状態が継続した (アイドルでない) 場合、スレッドをスタック状態と診断します。サーバのスレッド検出動作は、スレッドがスタック状態と診断されるまでの時間や、サーバがスタック スレッドをチェックする頻度を変更することでチューニングできます。

注意 : WebLogic Server がスレッドがスタックかどうかを判断するために使用する基準は変更できますが、特定の実行キューのすべてのスレッドがスタック状態になった場合に「warning」および「critical」状態を設定するデフォルト動作を変更することはできません。詳細については、「WebLogic ロギング サービスの概要」を参照してください。

WebLogic Server のスレッド検出動作をコンフィグレーションするには、次の手順に従います。

  1. 管理サーバが起動していない場合は、起動します。
  2. ドメインの Administration Console にアクセスします。
  3. 左ペインの [サーバ] ノードを展開して、ドメインでコンフィグレーションされたサーバを表示します。
  4. スタック スレッドの検出を向上するために変更するサーバ インスタンスの名前をクリックします。
  5. 注意 : スタック スレッド検出パラメータは、実行キューごとではなく、サーバごとにコンフィグレーションします。

  6. 右ペインの [コンフィグレーション|チューニング] タブを選択します。
  7. 次の属性を必要に応じて変更し、サーバに対するスレッド検出動作をチューニングします。
    • [スタック スレッド最大時間] : このサーバがスレッドをスタック状態であると診断するまでの、スレッドの継続動作時間を秒単位で入力します。デフォルトでは、WebLogic Server は 600 秒の継続使用後にスレッドを「スタック状態」であると見なします。
    • [スタック スレッド タイマ間隔] : [スタック スレッド最大時間] で指定した期間スレッドが継続動作しているかどうかを WebLogic Server がスキャンする間隔を秒単位で入力します。デフォルトでは、WebLogic Server はこの間隔を 600 秒に設定しています。
  8. [適用] をクリックして変更を保存します。
  9. サーバを再起動して新しい設定内容を有効にします。

 


接続バックログのバッファリングのチューニング

config.xml ファイルの Server 要素の AcceptBacklog 属性を使用すると、WebLogic Server インスタンスが受け入れる接続リクエストの数を設定できます (これ以上のリクエストは拒否されます)。AcceptBacklog 属性は、待機キューに格納できる Transmission Control Protocol (TCP) 接続の数を指定します。この固定サイズのキューには、TCP スタックでは受信されたが、アプリケーションにはまだ受け入れられていない接続リクエストが格納されます。デフォルト値は 50 で、最大値はオペレーティング システムによって異なります。

Administration Console から [バックログを受け入れ] 値をチューニングするには、次の手順を行います。

  1. 管理サーバが起動していない場合は、起動します。
  2. ドメインの Administration Console にアクセスします。
  3. 左ペインの [サーバ] ノードを展開して、ドメインでコンフィグレーションされたサーバを表示します。
  4. コンフィグレーションするサーバ インスタンスの名前をクリックします。
  5. [コンフィグレーション|チューニング] タブを選択します。
  6. デフォルトの [バックログを受け入れ] 値を必要に応じて変更し、待機キューに格納できる TCP 接続の数をチューニングします。
    • 処理中に、クライアントで多くの接続が削除または拒否され、サーバに他のエラー メッセージが存在しない場合は、[バックログを受け入れ] 値が小さすぎる可能性があります。
    • WebLogic Server にアクセスしようとしたときに「connection refused (接続が拒否されました)」というメッセージを受け取った場合は、[バックログを受け入れ] 値をデフォルトから 25% 大きくします。メッセージが表示されなくなるまで、値を 25% ずつ大きくしていきます。
  7. [適用] をクリックして変更を保存します。

 


JDBC 接続プールによるパフォーマンスの向上

DBMS への JDBC 接続の確立には非常に時間がかかる場合があります。JDBC アプリケーションでデータベース接続のオープンとクローズを繰り返す必要がある場合、これは重大なパフォーマンスの問題となります。WebLogic 接続プールは、こうした問題を効率的に解決します。

WebLogic Server を起動すると、接続プール内の接続が開き、すべてのクライアントが使用できるようになります。クライアントが接続プールの接続をクローズすると、その接続はプールに戻され、他のクライアントが使用できる状態になります。つまり、接続そのものはクローズされません。プール接続のオープンとクローズには、ほとんど負荷がかかりません。

どのくらいの数の接続をプールに作成すればよいでしょうか。接続プールの数は、コンフィグレーションされたパラメータに従って最大数と最小数の間で増減させることができます。最高のパフォーマンスが得られるのは、同時クライアント セッションと同じくらいの数の接続が接続プールに存在する場合です。

以降の節に加えて、『WebLogic JDBC プログラマーズ ガイド』の「JDBC アプリケーションのパフォーマンス チューニング」も参照してください。

JDBC 接続プールの初期サイズのチューニング

JDBCConnectionPool 要素の InitialCapacity 属性を使用すると、プールのコンフィグレーション時に作成する物理的なデータベース接続の数を設定できます。ここで指定した数の接続をサーバで作成できない場合、この接続プールの作成は失敗します。

開発時は、InitialCapacity 属性の値を小さく設定して、サーバがすばやく起動するようにしておくと便利です。プロダクション システムでは、InitialCapacity の値を、プロダクション モードの MaxCapacity のデフォルト値である 25 に設定するようにしてください。これにより、サーバの起動時にすべてのデータベース接続を取得できます。MaxCapacity 値をチューニングする必要がある場合は、InitialCapacity を必ず MaxCapacity 値と同じ値に設定してください。

InitialCapacity の値が MaxCapacity の値より小さい場合は、負荷が増加すると、サーバで追加のデータベース接続を作成しなくてはならなくなります。サーバに負荷がかかると、できるだけ速くリクエストを完了するためにすべてのリソースが処理に費やされることになり、新しいデータベース接続を作成できなくなります。

JDBC 接続プールの最大サイズのチューニング

JDBCConnectionPool 要素の MaxCapacity 属性を使用すると、接続プールが保持できる物理的なデータベース接続の最大数を設定できます。JDBC ドライバおよびデータベース サーバによっては、可能な物理的接続の数が制限されている場合もあります。

開発モードとプロダクション モードのデフォルト設定は、実行スレッドのデフォルト数である 15 (開発モード) と 25 (プロダクション モード) と同じです。ただし、プロダクション システムでは、プール内の接続数を、JDBC 接続を必要とする並行クライアント セッションの数と同じにすることをお勧めします。プールのサイズは、サーバ内の実行スレッドの数とは無関係です。実行中のユーザ セッションが実行スレッドより多くなる場合もあります。

Prepared Statement と Callable Statement のキャッシュ

アプリケーションまたは EJB で Prepared Statement や Callable Statement を使用すると、アプリケーション サーバとデータベース サーバの間の通信およびデータベース サーバ自体においてかなりの処理オーバーヘッドが生じます。WebLogic Server では、処理コストを最小限に抑えるため、アプリケーションで使用する Prepared Statement や Callable Statement をキャッシュできます。アプリケーションまたは EJB がこれらの Statement を呼び出すと、キャッシュに格納された Statement が再利用されます。Prepared Statement や Callable Statement を再利用することで、データベース サーバの CPU の使用率が下がり、現在の Statement のパフォーマンスが向上するため、CPU サイクルを他のタスクに割り当てることができます。詳細については、Administration Console オンライン ヘルプの「Statement キャッシュによるパフォーマンス向上」を参照してください。

Statement キャッシュを使用することでパフォーマンスを大幅に向上させることができますが、制限があることも考慮に入れる必要があります。詳細については、Administration Console オンライン ヘルプの「Statement キャッシュに関する制限」を参照してください。

 


Java コンパイラの設定

JSP サーブレットをコンパイルするための標準 Java コンパイラは javac です。サーバの Java コンパイラを javac ではなく sj または jikes に設定することにより、パフォーマンスを大幅に向上させることができます。 以降の節では、この手順とコンパイラに関するその他の考慮事項について説明します。

Administration Console でのコンパイラの変更

コンパイラを Administration Console で変更するには、次の手順を行います。

  1. 管理サーバが起動していない場合は、起動します。
  2. ドメインの Administration Console にアクセスします。
  3. 左ペインの [サーバ] ノードを展開して、ドメインでコンフィグレーションされたサーバを表示します。
  4. コンフィグレーションするサーバ インスタンスの名前をクリックします。
  5. [コンフィグレーション|全般] タブを選択し、[Java コンパイラ] フィールドにコンパイラの絶対パスを入力します。次に例を示します。
  6. c:\visualcafe31\bin\sj.exe

  7. [詳細オプション] 上の [表示] をクリックし、他の属性を表示します。
  8. [クラスパスの後ろに追加] フィールドに JRE rt.jar ライブラリの絶対パスを入力します。次に例を示します。
  9. BEA_HOME\jdk141_02\jre\lib\rt.jar

  10. [適用] をクリックします。
  11. サーバを再起動して、[Java コンパイラ] および [クラスパスの後ろに追加] テキスト ボックスを有効にします。

weblogic.xml でのコンパイラの設定

weblogic.xml ファイルでは、jsp-descriptor 要素を使用してサーブレット JSP のパラメータの名前と値を定義します。

  • compileCommand パラメータでは、生成される JSP サーブレットをコンパイルするための Java コンパイラを指定します。
  • precompile パラメータでは、WebLogic Server の起動時に WebLogic Server で JSP をあらかじめコンパイルするようコンフィグレーションします。

サーバの Java コンパイラを weblogic.xml ファイルで設定する作業の詳細については、jsp-descriptor 要素を参照してください。

EJB コンテナ クラスのコンパイル

weblogic.appc ユーティリティを使用すると、EJB 2.0 および 1.1 のコンテナ クラスをコンパイルできます。EJB コンテナにデプロイするために Jar ファイルをコンパイルする場合は、weblogic.appc を使用して、コンテナ クラスを生成する必要があります。ejbc は、デフォルトでは javac コンパイラを使用します。パフォーマンスを向上させるには、-compiler フラグを使用して別のコンパイラ (Symantec の sj など) を指定します。

詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「エンタープライズ JavaBean の実装」を参照してください。

UNIX でのコンパイル

UNIX マシン上で JSP ファイルをコンパイルしているときに次のエラー メッセージが表示された場合、

failed: java.io.IOException: Not enough space

以下のいずれかまたはすべての処理を試みます。

  • 256MB しかない場合は RAM を増設する。
  • ファイル記述子の制限を上げる。設定例を示します。
  • set rlim_fd_max = 4096
    set rlim_fd_cur = 1024
  • JVM の起動時に -native フラグを使用してネイティブ スレッドを使用する。

 


WebLogic Server クラスタを使用したパフォーマンスの向上

WebLogic Server クラスタは WebLogic Server インスタンスのグループで、互いに連携してフェイルオーバおよびレプリケーション サービスを提供することにより、ドメイン内のクライアントに対してスケーラブルで可用性の高い運用をサポートします。クラスタはそのクライアントにとって単一のサーバに見えますが、実際にはスケーラビリティと信頼性を向上するために一体で機能するサーバ群です。

ドメインには複数の WebLogic Server クラスタと、クラスタ化されない WebLogic Server インスタンスが存在できます。ドメイン内でクラスタ化される WebLogic Server インスタンスの動作は、フェイルオーバとロード バランシングの機能を備えること以外は、クラスタ化されないインスタンスと同様です。インスタンスのすべてのコンフィグレーション パラメータは、そのインスタンスがクラスタ化されるかどうかにかかわらず、そのドメインの管理サーバによって管理されます。

クラスタの詳細については、「WebLogic Server のクラスタ化の概要」を参照してください。

スケーラビリティおよび高可用性

スケーラビリティとは、リソースの追加に伴ってシステムが 1 つまたは複数の側面において拡張していく能力です。通常、これらの側面としては (他にも多数ありますが) サポート可能な同時接続ユーザの数や、一定時間に処理可能なトランザクションの数などが挙げられます。

優れたアプリケーションであれば、単にリソースを追加することによってパフォーマンスが向上します。WebLogic Server の負荷処理の機能を強化するには、新しい WebLogic Server インスタンスをクラスタに追加します。その際、アプリケーションを変更する必要はありません。クラスタは、単一のサーバでは提供できない、スケーラビリティと可用性という 2 つの大きなメリットをもたらします。

WebLogic Server クラスタは、アプリケーション開発者からは見えないように、J2EE アプリケーションにスケーラビリティと高可用性を提供します。スケーラビリティにより中間層の能力が拡張され、単一の WebLogic Server またはコンピュータの能力を超過することができます。クラスタ メンバシップの唯一の制限は、すべての WebLogic Server が IP マルチキャストで通信できなければならないということです。新しい WebLogic Server をクラスタに動的に追加して能力を増大させることもできます。

WebLogic Server クラスタは、複数サーバの冗長性を利用してクライアントを障害から保護することで高可用性を確保します。クラスタ内の複数のサーバで、同じサービスを提供できます。1 つのサーバで障害が発生しても、別のサーバが引き継ぎます。障害が発生したサーバから機能しているサーバへのフェイルオーバ機能によって、クライアントに対するアプリケーションの可用性が増大します。

警告 : すべてのアプリケーションおよび環境上のボトルネックが解決済みという条件下で初めて、新しいサーバへのクラスタの追加により、直線的なスケーラビリティが実現されます。ベンチマークまたは初期コンフィグレーション テストを実行するときには、単一サーバ環境における問題を洗い出した後で、クラスタ化環境に移行してください。

WebLogic クラスタ用のスケーラビリティを確認する方法

一般にクラスタのサーバ間の通信が必要である何らかの処理は可能性のある拡張性障害であります。以下の節では、直線的にスケール クラスタされた WebLogic server への機能に影響を与える問題に関する情報を提供します。

データベース ボトルネック

多くの場合、WebLogic server のクラスタはスケールに失敗する場合、データベースはネットワークであります。この場合は、他のオプションを理解してデータベースをチューニングするまたはデータベースのロードを削減することだけソリューションです。JDBC アプリケーションのチューニングを参照してください。

セッション レプリケーション

ユーザ セッション データは、J2EE アプリケーションの 2 つの標準方法で格納することができます。たとえば、ステートフル セッション EJB または HTTP セッション。  彼らだけで、これらはクラスタ拡張性にまれに影響を与えます。だたし、セッション レプリケーション メカニズムと結び付いている場合は、高可用性を提供し、ボトルネックを導入されます。 J2EE アプリケーションには、Web および EJB コンポーネントがあり、HTTP セッション管理は、ステートフル セッション EJB より 1 つ以上の レプリケーション オプションを提供するので、ユーザ セッション データをステートフル セッション EJBよりHTTP セッションに格納しなければなりません。 セッションの管理を参照してください。

エンティティ EJB の無効化

これは、エンティティ EJB に適用されます。このエンティティ EJB は、読み込みが行われ、読み書き対応パタ-ンを使用して、OptimisticまたはReadOnly の同時方式を使用します。

OptimisticOptimistic 同時実行性 Bean を更新する場合は、EJB コンテナがbeanのローカル コピーを無効化するために他のクラスタ メンバー にマルチキャスト メッセージが送信します。これをすると、他のサーバによって送出されたオプティミスティックな同時実行性例外が回避され、したがって、トランザクションを再試行する必要があります。EJB が頻繁に更新すると、互いのロカール キャッシュを無効化にするサーバが行った作業は深刻なボトルネックになります。

読み込みが行われ、読み書き対応パタ-ンによってReadOnly このパターンでは、単一の EJB で表される永続データは実際に2つの EJB で表されます。1つは、読み込み専用および 2 つは、 更新できる EJB です。更新できる bean の状況が変更する場合、コンテナが 対応する read-only EJB インスタンスを自動的に無効化します。EJB が頻繁に更新すると、読み込み専用を無効化するにはサーバが行った作業は深刻なボトルネックになります。

HTTP セッションの無効化

エンティティ EJB の無効化と同じ、 HTTP セッションは無効化である可能性があります。セカンダリ サーバに格納したセッションデータだけ無効化にする必要があるので、これは、エンティティ EJB 無効化の対象ほど高くありません。特別に必要な場合以外は、セッションを無効化にしないことをお勧めします。

JNDI のバインド、アンバインド および リバインド

一般にJNDI のバインド、アンバインド および リバインドは負荷の大きな処理であります。ただし、JNDI ツリー内の情報が変更することをクラスタのすべてのメンバーに伝播する必要があるので、これらの処理はクラスタ化された環境により大きなボトルネックになります。このような処理が頻繁に行うと、クラスタ スケーラビリティは大幅に削減できます。

マルチ CPU マシンのパフォーマンスに関する考慮事項

マルチプロセッサ マシンを使用する場合は、使用可能な CPU の数とクラスタ化された WebLogic Server インスタンスの数との比率も考慮する必要があります。 WebLogic Server には、クラスタ内のサーバ インスタンス数に関する制限はありません。したがって、Sun Microsystems の Sun Enterprise 10000 などの大規模マルチプロセッサ サーバは、非常に大規模なクラスタまたは複数のクラスタのホストとなることができます。

CPU と WebLogic Server インスタンスの最適な比率を決定するには、まず、アプリケーションがネットワーク I/O またはディスク I/O ではなく完全に CPU にバインドされていることを確認する必要があります。 以下の手順で、CPU とサーバ インスタンスの最適な比率を決定します。

  1. アプリケーションをテストしてネットワークの要件を決定します。
  2. アプリケーションが主にネットワーク I/O にバインドされている場合は、使用可能な CPU の数を増やす前にネットワーク スループットを高める方策を検討します。アプリケーションが完全にネットワーク I/O にバインドされている場合は、CPU を追加するより高速のネットワーク インタフェース カード (NIC) を取り付ける方がパフォーマンスは向上します。これは、ほとんどの CPU が、使用可能なソケットの読み込み待機中もアイドル状態のままになるためです。

  3. アプリケーションをテストしてディスク I/O の要件を決定します。
  4. アプリケーションが主にディスク I/O にバインドされている場合は、CPU を追加する前に、ディスク スピンドル数または個別のディスクとコントローラの数を増やすことを検討します。

  5. まず、使用可能なすべての CPU に対して 1 つの WebLogic Server インスタンスの比率でパフォーマンスをテストします。
  6. CPU 使用率がほぼ 100% を常に維持している場合は、CPU を追加してサーバに対する CPU の比率を高くします。使用率が許容できるレベルに達するまで CPU を追加してゆきます。プロダクション システムでは、管理タスクを実行できるように、利用可能な CPU サイクルを予備として常に確保しておきます。

 


WebLogic Server ドメインのモニタ

WebLogic Server ドメインの状態とパフォーマンスをモニタするためのツールは Administration Console です。Administration Console では、サーバ、HTTP、JTA サブシステム、JNDI、セキュリティ、CORBA 接続プール、EJB、JDBC、JMS といった WebLogic Server リソースのステータスと統計を表示できます。

詳細については、『WebLogic Server のコンフィグレーションと管理』の「WebLogic Server ドメインのモニタ」を参照してください。

たとえば、Administration Console の [サーバ|モニタ|パフォーマンス] タブには、現在のサーバ インスタンスの保留中のリクエストや処理済みのリクエストに関するパフォーマンス メトリックが表示されます。これには以下の情報が含まれています。

  • このキューに割り当てられるアイドル スレッドの数
  • キュー内の最も古い保留リクエスト
  • キューによってすでに処理されたリクエストの数を基に測定したスループット
  • このキュー内で待機中のリクエストの数を基に測定したキューの長さ
  • JVM ヒープで使用可能なメモリの量

詳細については、Administration Console オンライン ヘルプの「[サーバ] --> [モニタ] --> [パフォーマンス]」を参照してください。

 

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