ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Serverパフォーマンスおよびチューニング
11gリリース1 (10.3.6)
B61002-06
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

11 メッセージドリブンBeanのチューニング

この章では、メッセージドリブンBean (MDB)のチューニングとベスト・プラクティスについて説明します。

トランザクション・バッチの使用

MDBトランザクションのバッチ処理を使用すると、複数のJMSメッセージを1つのコンテナ管理トランザクションに管理できます。バッチ処理を使用すると、複数のメッセージのトランザクション・コストが償却されます。また、適切に使用すると、2PC処理と1PC処理の間のスループットの差も削減、または排除できます。『Oracle Fusion Middleware Oracle WebLogic ServerメッセージドリブンBeanのプログラミング』のMDBのトランザクションのバッチ処理に関する項を参照してください。

MDBスレッド管理

MDBのスレッド管理については、同時実行性、すなわち同時にアクティブになれるMDBインスタンス数の観点から説明します。次の項では、MDBの同時実行性について説明します。

同時MDBの数の確定

表11-1では、サーバー・インスタンスに対して同時実行しているMDBインスタンス数の確定方法に関する情報を提供します。

表11-1 WebLogic Server MDBの同時実行性の確定

ワーク・マネージャまたは実行キューのタイプ スレッド

デフォルトのワーク・マネージャまたは制約のないワーク・マネージャ

最大でMin(max-beans-in-free-pool,16)で、自動チューニングにより変化します

デフォルトのワーク・マネージャ、自動チューニングを無効化

Min(default-thread-pool-size/2+1, max-beans-in-free-pool)

これは、WebLogic Server 8.1でのデフォルト・スレッド・プールの同時実行性方式でもあります。

カスタム実行キュー

Min(execute-queue-size, max-beans-in-free-pool)

カスタム・ワーク・マネージャ、制約有り

min-thread-constraintとMin(max-threads-constraint, max-beans-in-free-pool)の間で、自動チューニングにより変化します


トランザクション対応のWebLogic MDBは、A) WebLogic以外のキューをリスニングしている場合、またはB) WebLogicキューをリスニングしていて、トランザクション・バッチ処理が有効になっている場合、同期的なポーリング・メカニズムを使用してJMS宛先からメッセージを取得します。「キュー/トピックにリスニングするトランザクション対応のMDBに対するトークン・ベースのメッセージ・ポーリング」を参照してください。

同時実行性戦略の選択

次の項では、アプリケーションに対して同時実行性戦略を選択するための全般的な情報を示します。


注意:

アプリケーションはそれぞれに特性があり、使用するアプリケーションがその環境でどのように動作するのかに基づいて同時実行性戦略を選択します。


  • ほとんどの状況において、メッセージ・ストリームにメッセージの急増が見られる場合には、制約のないワーク・マネージャを高いフェア・シェアで使用するのが適切です。急増したメッセージ群が処理されると、スレッドは自動チューニング・プールに返されます。

  • ほとんどの状況において、メッセージの到着率を高いレベルで一定させるか、待機時間を小さくすることが求められる場合、MDBに対してスレッドを予約すると有効です。スレッドを予約するには、ワーク・マネージャにmin-threads-constraintを指定するか、カスタム実行キューを使用します。

  • カスタムMDB実行キューを備えたWebLogic Server 8.1のアプリケーションを移行する場合、以下の設定が可能です。

    • カスタムMDB実行キューを引き続き使用します。付録A「WebLogic 8.1スレッド・プール・モデルの使用」を参照してください。

    • MDB実行キューを、max-threads-constraintパラメータおよび高いフェア・シェア設定が構成されたカスタム・ワーク・マネージャに変換します。


      注意:

      デフォルトの同時実行性数(16)をオーバーライドするためには、max-threads-constraintパラメータを構成する必要があります。


  • WebLogic Server 8.1では、デフォルトのプールを拡張すると同時実行性MDBの最大数も大きくなることから、デフォルトの実行キューのサイズを増加できました。WebLogic Server 9.0でアップグレードされたデフォルト・スレッド・プールのMDBは、最大数が16に固定されています。MDB同時実行の数を16よりも大きくするには、カスタム・ワーク・マネージャまたはカスタム実行キューを作成する必要があります。表11-1を参照してください。

WebLogic宛先を使用する場合のスレッドの利用

次の項では、WebLogic ServerとWebLogic宛先が相互運用する場合のスレッドの割当て方法について説明します。

  • トランザクション非対応のWebLogic MDBでは、処理すべき新しいメッセージがある場合、必要に応じて、dispatch-policyで指定されているスレッド・プールからスレッドを割り当てます。MDBが正常にソース宛先に接続したものの処理するメッセージがない場合、MDBはスレッドを使用しません。

  • トランザクションのバッチ処理を 無効化したトランザクションWebLogic MDBには、「互換性」(デフォルト)のトピック・メッセージ分散モードを使用するトピックMDBを除く非トランザクションMDBと同一の機能があります。いずれの場合でも、MDBは常にスレッド・プール・サイズを1に制限します。

  • トランザクション対応のMDBでトランザクション・バッチ処理が有効になっている場合は、MDBがトピックとキューのどちらでリスニングしているかによって動作が異なります。

    • トピックでリスニングしているMDB: - 各デプロイ済みMDBは、プールされないスレッドのグループで作成される、専用のデーモン・ポーリング・スレッドを使用します。

      • トピック・メッセージ分散モード = 互換性: デプロイされた各MDBは、プールされていないスレッドのスレッド・グループで作成される専用のデーモン・ポーリング・スレッドを使用します。

      • トピック・メッセージ分散モード = One-Copy-Per-ServerまたはOne-Copy-Per-Application: キューと同様。

    • キューでリスニングしているMDB - 各デプロイ済みMDBは、専用のスレッドを使用する代わりに、トークン・ベースの同期ポーリング・メカニズムを使用します。このメカニズムでは常にdispatch-policyから少なくとも1つのスレッドを使用します。「キュー/トピックにリスニングするトランザクション対応のMDBに対するトークン・ベースのメッセージ・ポーリング」を参照してください。

WebLogic Serverを外部宛先から消費されたMDBと相互運用するときのスレッドの割当て方法の詳細は、「外部宛先からのメッセージを処理するMDBのスレッドの使用」を参照してください。

マルチスレッド・トピックMDBの制限

topicMessagesDistributionMode「互換性」であるとき、非トランザクション・トピックMDBのデフォルト動作は、メッセージ処理のマルチスレッド化です。この場合、予期しない例外や未処理のメッセージの確認応答など、トピックがWebLogic JMSトピックでないとき、MDBコンテナは再現可能な動作を提供できません。たとえば、アプリケーションがonmessageからRuntimeExceptionをスローする場合、コンテナはメッセージを確認する可能性があります。トピックが外部ベンダー・トピックであるとき(WebLogic JMSトピックでないとき)、トピックMDBにおけるマルチスレッド化を防ぐために、デプロイメント記述子でmax-beans-in-free-poolの値を1に設定することをお薦めします。


警告:

非トランザクション外部トピック: 外部(WebLogic以外の)トピックと共に機能する非トランザクションMDBには、明示的にmax-beans-in-free-pool1に設定することをお薦めします。この設定に失敗すると、MDBアプリケーションがRuntimeまたはErrorの例外をスローするなど、特定のエラーがある場合にメッセージの損失につながる可能性があります。

順序単位: WebLogic JMSトピックから消費してWebLogic JMSの「順序単位」値を持つメッセージを処理する非トランザクション「互換性」モードのMDBには、明示的にmax-beans-in-free-pool1に設定することをお薦めします。この使用事例のような「順序単位」メッセージは、max-beans-in-free-pool1に設定しない場合、順序通りに処理されない可能性があります。


トランザクションMDBは、max-beans-in-free-poolの設定に関係なく、強制的に自動で同時実行性を1に設定します。

分散トピックを使用したMDBの構成およびデプロイのベスト・プラクティス

メッセージドリブンBeanは、分散トピックの使用時にスケーラビリティと高可用性を付与する多数のアプリケーション設計およびデプロイメント・オプションを提供します。詳細は、『Oracle WebLogic ServerメッセージドリブンBeanのプログラミング』の分散トピックを使用したMDBの構成およびデプロイに関する項を参照してください。

外部宛先におけるMDBの使用


注意:

ここでの「外部宛先」とは、WebLogic以外のJMSプロバイダによってホストされる宛先を示します。リモートWebLogic宛先のことではありません。


次の項では、外部宛先からのメッセージを消費するMDBを使用したときのWebLogic Serverの動作について説明します。

外部宛先からのメッセージを処理するMDBの同時実行性

外部プロバイダによってホストされている宛先(WebLogic JMS以外の宛先)からのメッセージを消費するMDBの同時実行性は、WebLogic JMS宛先に使用するアルゴリズムと同じアルゴリズムを使用して決定されます。

外部宛先からのメッセージを処理するMDBのスレッド使用率

次の項では、WebLogic Serverが外部宛先からのメッセージを処理するMDBと相互運用するときのスレッドの割当て方法について説明します。

  • トランザクション非対応のMDBは外部ベンダーのスレッドを使用し、WebLogic Serverのスレッドは使用しません。この場合、dispatch-policyは同時実行性方式の決定以外では無視されます。

  • トランザクション対応のMDBは、次のようにWebLogic Serverスレッドで動作します。

キュー/トピックにリスニングするトランザクション対応のMDBに対するトークン・ベースのメッセージ・ポーリング

トランザクションWebLogic MDBは、同期ポーリング・メカニズムを使用して、次の場合にJMS宛先からメッセージを取得します。

同期ポーリングを使用すると、1つ以上のWebLogicポーリング・スレッドはMDBのソース宛先から同期的にメッセージを受信し、MDBアプリケーションのonMessageコールバックを呼び出します。

WebLogic 10.3では、メッセージの負荷が変動する状況で同時ポーラー・スレッド数を制御しやすくなるように、ポーリング・メカニズムがトークン・ベースの手法に変更されました。以前のリリースでは、特定の状況において、スレッド数の増加が緩やかすぎる場合がありました。また、特定の外部JMSプロバイダでは、子ポーラーを一度起動すると、数を減らしてプールに戻すことができない場合もありました。

トークン・ベースのポーリングでは、スレッドがスレッド・プールに戻されるとき、スレッドの内部JMSコンシューマはキャッシュされるのではなく、閉じられます。そのため、コンシューマに対応するポーリング・スレッドはなくなり、メッセージが特定の外部JMSプロバイダによって暗黙的にプリフェッチされることがなくなります。

また、各MDBは、特定のポーラー・スレッドに別スレッドの作成を許可する単一のトークンを保持します。

WLS 10.0以前のバージョン方式のポーリングに対する互換性

WLSバージョン10.0以前では、バッチ処理が有効になっているトランザクション対応MDBは、デプロイ済みの各MDBごとに専用のポーリング・スレッドを作成していました。このポーリング・スレッドはdispatch-policyで指定されたプールから割り当てられるものではなく、システムで動作している他のすべてのスレッドに追加される、完全に新しいスレッドでした。「トランザクション・バッチの使用」を参照してください。

トークン・ベースのポーリングの動作をオーバーライドしてWLS 10.0以前の動作を実装するには、以下のいずれかを行います。