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

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

WebLogic JMS のチューニング

以下の節では、WebLogic JMS の管理パフォーマンス チューニング機能を実装することによってアプリケーションを最大限に活用する方法について説明します。

 


割り当ての定義

以前のリリースでは、複数のレベルの割り当てがありました。送り先には独自の割り当てがあり、同時に JMS サーバ内の割り当てをめぐって競合する必要もありました。このリリースでは、割り当てのレベルは 1 つだけです。送り先では、独自のプライベートの割り当てを使用することも、共有割り当てを使用して他の送り先と競合することもできます。

独自の割り当てを定義する送り先は、JMS サーバの割り当てのスペースを共有しません。JMS サーバでは、引き続きメッセージとバイトの割り当てを直接コンフィグレーションできますが、これらのオプションは割り当てリソースを参照しない送り先の割り当てを定義するためにのみ使用できます。

割り当てリソース

割り当てとは、コンフィグレーション可能な名前付きの JMS モジュール リソースです。割り当てでは、メッセージおよびバイトの最大数を定義します。これを 1 つまたは複数の送り先に関連付けることで、定義した最大数を強制することができます。同じ割り当てを参照する複数の送り先は、割り当てリソースの共有ポリシーに従ってその割り当てを共有します。

割り当てリソースでは、以下のパラメータをコンフィグレーションできます。

表 13-1 割り当てのパラメータ
属性
説明
[最大バイト数と最大メッセージ数]
割り当ての [最大メッセージ数] および [最大バイト数] パラメータでは、その割り当てリソースで使用できるメッセージとバイトの最大数を定義する。保留中のメッセージは考慮されない。つまり、処理中であったり遅延されていたり、もしくは配信が抑制されているメッセージが、メッセージ数やバイト数の割り当てに突き合わせて計数される。
[割り当ての共有]
割り当てリソースの [共有] パラメータでは、同じ割り当てリソースを参照する複数の送り先が、リソースの使用において相互に競合するかどうかを定義する。
[割り当てポリシー]
[ポリシー] パラメータでは、使用できる割り当てがない場合に、個々のクライアントが割り当てをめぐってどのように競合するかを定義する。接続ファクトリで送信タイムアウト機能が有効になっている場合、このパラメータは送信リクエストのブロックが解除される順序に影響する。「サイズの大きなメッセージのチューニング」を参照。

割り当てのコンフィグレーション パラメータの詳細については、『WebLogic Server MBean Reference』の「QuotaBean」を参照してください。Administration Console を使用して割り当てリソースをコンフィグレーションする手順については、Administration Console オンライン ヘルプの「システム モジュール内の送り先の割り当ての作成」を参照してください。

送り先レベルの割り当て

送り先では、割り当てのバイトおよびメッセージの最大数は定義しないことになりました。代わりに、これらの値を定義した割り当てリソースと、共有および競合に関する割り当てポリシーを使用できます。

送り先の [割り当て] パラメータでは、その送り先に割り当てを強制するためにどの割り当てリソースを使用するかを定義します。この値は動的で、いつでも変更できます。ただし、割り当てリソースを変更した時点でその割り当ての未処理リクエストがあると、そうしたリクエストは javax.jms.ResourceAllocationException で失敗します。

注意: 割り当ての未処理リクエストは、割り当てリソースが変更されたときに失敗します。これは、送り先の割り当てを他の割り当てに切り替えたときに失敗することを意味し、割り当てリソースのメッセージ属性やバイト属性を変更したときには失敗しません。

JMS サーバ レベルの割り当て

送り先で割り当てをコンフィグレーションしない場合もあります。JMS サーバの割り当てを使用すると、これらの「割り当てをコンフィグレーションしていない」送り先で使用するリソースを制限できます。[割り当て] 属性が明示的に設定されていないすべての送り先は、それらがデプロイされている JMS サーバの割り当てを共有します。この場合の動作は、[共有] パラメータが有効になっている各 JMS サーバに特別な割り当てリソースが定義されている場合とまったく同じです。

JMS サーバの割り当てのインタフェースは、以前のリリースから変更されていません。JMS サーバの割り当ては、JMSServerMBean のメソッドを使用して完全に制御できます。JMS サーバの割り当ての割り当てポリシーは、JMS サーバで [ブロッキング時の送信ポリシー] パラメータを使用して設定します。詳細については、「JMS サーバでの [ブロッキング時の送信ポリシー] の指定」を参照してください。JMS サーバの割り当ての割り当てポリシーも、他の割り当てのポリシー設定と同じように機能します。

 


割り当て条件内での送信者のブロック

接続ファクトリでの送信タイムアウトの定義

割り当て条件内で (送信タイムアウトを定義して) プロデューサをブロックすると、アプリケーションのパフォーマンス、および割り当て失敗時のメッセージ送信の継続した再試行におけるベンチマークが大幅に向上します。[送信タイムアウト] 機能を使用すると、送り先でスペースを利用できるようになるまで指定の時間にわたってメッセージの生成を待機できるため、メッセージ送信処理をより細かく制御できます。たとえば、プロデューサがリクエストを行い、十分なスペースが存在しない場合、プロデューサはスペースが利用可能になるまでブロックされるか、または処理がタイムアウトになります。別のフロー制御方法については、「JMS サーバおよび送り先のメッセージのフロー制御」を参照してください。

Administration Console を使用して、送り先がメッセージの最大割り当てを超過したときに JMS 接続ファクトリがメッセージのリクエストをブロックする時間を定義するには、次の手順に従います。

  1. Administration Console オンライン ヘルプの「接続ファクトリのフロー制御のコンフィグレーション」の説明に従って、[JMS 接続ファクトリ : コンフィグレーション : フロー制御] ページに移動します。
  2. [送信タイムアウト] フィールドに、メッセージ送り先に十分なスペースが存在しない場合に送信側がメッセージをブロックする時間をミリ秒単位で入力します。ここで指定した期間が経過すると、以下のいずれかの結果が発生します。
    • タイムアウト期間の終了前に十分なスペースが利用できるようになった場合、操作は続行される。
    • タイムアウト期間の終了前に十分なスペースが利用できない場合、「リソース割り当て」例外が発生する。
    • 値を 0 に設定してブロッキング時の送信ポリシーを有効にしない場合、送り先で十分なスペースが利用できないときに「リソース割り当て」例外が発生します。

      [送信タイムアウト] フィールドの詳細については、Administration Console オンライン ヘルプの「JMS 接続ファクトリ : コンフィグレーション : フロー制御」を参照してください。

  3. [保存] をクリックします。

JMS サーバでの [ブロッキング時の送信ポリシー] の指定

ブロッキング時の送信ポリシーを使用すると、メッセージ割り当てを超過した送り先で複数のプロデューサによるスペースの競合が存在するときに、小さいメッセージを大きいメッセージより先に送信するかどうかに関する JMS サーバのブロック動作を定義できます。

Administration Console を使用して、送り先がメッセージ割り当てを超過したときに JMS サーバがメッセージ要求をブロックする方法を定義するには、次の手順に従います。

  1. Administration Console オンライン ヘルプの「JMS サーバのしきい値と割り当てのコンフィグレーション」の説明に従って、Administration Console の [JMS サーバ : コンフィグレーション : しきい値と割り当て] ページに移動します。
  2. [ブロッキング時の送信ポリシー] リスト ボックスから、以下のいずれかのオプションを選択します。
    • [FIFO] - 同じ送り先に対するすべての送信要求は、スペースが使用できるようになるまで 1 つずつキューに入れられる。送信要求の実行は、スペースを待機する別の送信要求がその前に存在する限り許可されません。
    • [プリエンプティブ] - スペースが使用可能な場合、送信操作が別のブロックしている送信操作よりも先に処理できることを示す。つまり、現在の要求に対する十分なスペースが存在する場合、スペースを待機している他の要求がその前に存在する場合でもそのスペースが使用されます。
    • [ブロッキング時の送信ポリシー] フィールドの詳細については、Administration Console オンライン ヘルプの「JMS サーバ : コンフィグレーション : しきい値と割り当て」を参照してください。

  3. [保存] をクリックします。

 


サイズの大きなメッセージのチューニング

以下の節では、サイズの大きなメッセージを処理する際に JMS のパフォーマンスを向上させる方法について説明します。

 


MessageMaximum のチューニング

WebLogic JMS では、非同期コンシューマ (メッセージ リスナ)、またはプリフェッチが有効化された同期コンシューマに配信されるメッセージがパイプライン処理されます。これにより、サーバからクライアントに内部的にメッセージが送信されるときにメッセージが集約されるため、パフォーマンスが向上します。JMS サーバとクライアント間のメッセージのバックログ (パイプラインのサイズ) は、接続ファクトリで MessagesMaximum の設定をコンフィグレーションすることでチューニングできます。『WebLogic JMS プログラマーズ ガイド』の「非同期メッセージ パイプライン」を参照してください。

一部の環境では、MessagesMaximum パラメータをチューニングすることでパフォーマンスが大幅に向上することがあります。たとえば、JMS アプリケーションで確認応答やコミットが保留されている場合などです。この場合、MessagesMaximum に次の値を設定することをお勧めします。

   2 * (確認応答またはコミットの間隔) + 1

次に例を示します。

   JMS アプリケーションで一度に 50 メッセージを確認応答する場合、MessagesMaximum の値を 101 に設定します。

MessageMaximum 制限のチューニング

MessagesMaximum の値が大きすぎると、以下のような状況になることがあります。

クライアントでの最大メッセージ サイズの設定

大きなメッセージを送受信する場合、WebLogic Server インスタンスに加えて WebLogic クライアントをコンフィグレーションする必要があることもあります。クライアントに最大メッセージ サイズを設定するには、以下のコマンドライン プロパティを使用します。

   -Dweblogic.MaxMessageSize
注意: この設定は、JMS 関連パケットのみでなく、クライアントに配信されるすべての WebLogic Server ネットワーク パケットに対して適用されます。

 


メッセージの圧縮

ディスク スペースを節約しながら JVM 境界にまたがってやりとりされる大きなメッセージの送信パフォーマンスを向上させるため、ユーザ指定のしきい値サイズを超過したメッセージの自動圧縮を指定できます。メッセージの圧縮を使用すると、ネットワークを介して送信されるメッセージのサイズを自動的に小さくすることで、ネットワークのボトルネックを緩和できます。また、ファイル ストアやデータベースに永続メッセージを格納する際のディスク スペースも節約できます。

注意: メッセージの種類によっては、圧縮によって実際にはサイズが大きくなることがあるため、圧縮されたメッセージが送り先の割り当てに影響するおそれがあります。

メッセージ圧縮のしきい値は、WLMessageProducer インタフェースの JMS API 拡張機能を使用することによってプログラム的に設定するか、接続ファクトリまたは JMS SAF リモート コンテキストで [デフォルト圧縮しきい値] を指定することによって管理的に設定できます。

Administration Console を使用してデフォルト圧縮しきい値をコンフィグレーションする手順については、以下を参照してください。

コンフィグレーションされたメッセージ圧縮は、クライアント送信の場合はプロデューサ、メッセージ受信またはメッセージ ブラウズの場合は接続ファクトリに対して、または SAF 転送を通じて実行されます。メッセージは GZIP で圧縮されます。圧縮は、メッセージのプロデューサとコンシューマが別々のサーバ インスタンスに配置されていてメッセージが JVM 境界をまたぐ場合 (通常は、WebLogic ドメインが別のマシンにあってネットワーク接続をまたぐ場合) にのみ発生します。解凍は、メッセージのコンテンツがアクセスされたときに、クライアント サイドで自動的に発生します。ただし、以下の状況でも解凍が発生します。

サーバ サイドでは、ディスクに書き込まれるときでも、メッセージは常に圧縮されたままです。

 


メッセージのページングによるメモリの解放

メッセージ ページング機能を使用すると、メッセージ負荷のピーク時に JMS サーバによって自動的に仮想メモリの開放が試行されます。この機能は、大容量のメッセージ領域を使用するアプリケーションでは大きなメリットがあります。JMS サーバでは常にメッセージ ページングが有効になっており、メッセージ ページング ディレクトリは自動的に作成されるためコンフィグレーションする必要はありません。ただし、[ページング ディレクトリ] オプションを使用してディレクトリを指定することもでき、その場合はページングされたメッセージがこのディレクトリ内のファイルに書き込まれます。

JMS メッセージ ページングでは永続メッセージのデータがメモリにキャッシュされるため、永続メッセージ用のメモリを節約できます。JMS サーバがファイル ストア (ユーザ定義のストアまたはサーバのデフォルト ストア) に関連付けられている場合、ページングされた永続メッセージは通常はそのファイル ストアに書き込まれます。一方、非永続メッセージは、常に JMS サーバのページング ディレクトリに書き込まれます。JMS サーバが JDBC ストアに関連付けられている場合は、ページングされた永続メッセージと非永続メッセージの両方が常に JMS サーバのページング ディレクトリに書き込まれます。「永続ストア使用時のベスト プラクティス」を参照してください。

しかし、メッセージのヘッダは検索、ソート、フィルタ処理のためメモリに残されるため、メッセージをページングすることでそのメッセージが消費していたメモリをすべて開放できるわけではありません。ただし、ユーザ プロパティは例外で、メッセージの本文と一緒にページングされます。ページングされるメッセージの選択にセレクタを使用するキュー アプリケーションでは、ページングされたメッセージをページ インし直す必要があるため、パフォーマンスが大幅に低下する場合があります。これはメッセージ ヘッダ フィールド (たとえば CorrelationID) のみに基づいて選択するアプリケーションまたはトピックには当てはまりません。

メッセージ ページング ディレクトリの指定

ページング ディレクトリが指定されていない場合、ページングされたメッセージの本文はドメインのルート ディレクトリの servername サブディレクトリ内にある、デフォルトの \tmp ディレクトリに書き込まれます。たとえば、デフォルトのページング ディレクトリが指定されていない場合、次のディレクトリがデフォルトになります。

bea_home\user_projects\domains\domainname\servers\servername\tmp

domainname はドメインのルート ディレクトリ (通常は c:\bea\user_projects\domains\domainname) です。これは、WebLogic Server プログラム ファイルが格納されるディレクトリ (通常は c:\bea\weblogic92) に対応するディレクトリです。

[メッセージ バッファ サイズ] オプションのチューニング

[メッセージ バッファ サイズ] オプションでは、ディスクにページングされる前のメモリ内のメッセージ本文を保存するために使用するメモリの量を指定します。[メッセージ バッファ サイズ] のデフォルト値は、JVM の最大ヒープサイズのおよそ 3 分の 1、または最大値の 512 MB になります。このパラメータの設定値を大きくするほど、多くのメッセージがキューまたはトピックに待機している際に JMS でより多くのメモリが消費されます。このしきい値を超えると、JMS はメモリ使用量をしきい値未満に抑えようとして、[ページング ディレクトリ] オプションで指定したディレクトリに、メッセージ本文を書き込むことがあります。

このパラメータは割り当てではない点に注意してください。サーバ上のメッセージ数がしきい値を超えると、サーバはメッセージをディスクに書き込み、できるだけ速やかにメモリから削除してメモリ使用量を減らします。ただし、新しいメッセージの受信を休止することはありません。それでも、メッセージ受信速度がページング速度を上回る場合は、メモリ不足になる可能性があります。メッセージ負荷の大きいユーザができるかぎり高い可用性をサポートするには、割り当てを設定するか、しきい値を設定してフロー制御を有効にすることで、サーバ上でのメモリ使用量を減らすことを検討してください。

 


JMS サーバおよび送り先のメッセージのフロー制御

フロー制御機能を使うと、過負荷状態になっていると判断した JMS サーバや送り先は、メッセージ プロデューサの処理速度を遅くすることができます。「メッセージの圧縮」を参照してください。

以下の節では、フロー制御の仕組みと、接続ファクトリでフロー制御をコンフィグレーションする方法について説明します。

フロー制御の仕組み

JMS サーバやその送り先が指定のバイト数またはメッセージ数のしきい値を超えた場合、対処機能が作動し、メッセージ フロー (1 秒当たりのメッセージ数) を制限するようプロデューサに指示が出されます。

プロデューサは、JMS 接続ファクトリを通じてプロデューサ用にコンフィグレーションされた一連のフロー制御属性に基づき、プロダクション率を制限します。プロデューサは、指定した最大フローのメッセージ数から開始して、所定の間隔ごとに (たとえば、60 秒間、10 秒ごとに)、サーバや送り先がまだ対処機能を作動させたままであるかどうかを評価します。その時点において、サーバや送り先で対処機能が作動したままであれば、プロデューサは所定のフロー最小値までプロダクション率を低下させます。

プロデューサの処理速度が低下するにつれ、しきい値条件は徐々に補正されます。これはサーバや送り先の対処機能が解除されるまで行われます。この時点で、プロデューサはプロダクション率を上げることができるようになりますが、必ずしも最大限まで上げる必要はありません。実際には、メッセージ フローは、所定の最大フローに達してフロー制御の対象でなくなる時点までは (サーバや送り先が対処機能を解除していても) 引き続き制御されます。

フロー制御のコンフィグレーション

プロデューサは、セッションから一連のフロー制御属性を受信します。セッションは接続から、接続は接続ファクトリから、この属性を受信します。これらの属性により、プロデューサはメッセージ フローを調整できます。

具体的には、プロデューサはフローを最小値から最大値までの範囲内に制限する属性を受信します。プロデューサは、条件が悪くなると最小値側に移動し、改善されると最大値側に移動します。最小値側および最大値側への移行は、移行率を指定する 2 つの追加属性によって定義されます。また、最小値側および最大値側への移行の必要性は、コンフィグレーションされた間隔ごとに評価されます。

次の表では、フロー制御オプションについて説明します。

表 13-2 フロー制御パラメータ
属性
説明
[フロー制御を有効化]
プロデューサが JMS サーバによってフロー制御可能かどうかを決定する。
[最大フロー]
しきい値の条件に達したプロデューサに対する秒当たりの最大メッセージ数。
しきい値の条件に達したときにプロデューサでフローを制限していない場合、そのプロデューサの初期フロー制限が [最大フロー] に設定される。しきい値の条件に達したときにプロデューサがすでにフローを制限している場合 (フロー制限は [最大フロー] 未満)、プロデューサは次にフローが評価されるまで現在のフロー制限で処理を継続する。
いったん、しきい値条件への抵触を回避してからは、プロデューサはフロー限度を無視できなくなる。このフロー制限が [最大フロー] 未満の場合、プロデューサはフローが評価されるたびにそのフローを徐々に [最大フロー] まで増やす必要がある。プロデューサが [最大フロー] に達すると、そのフロー制限を無視し、そのフローを制限せずに送信できる。
[最小フロー]
しきい値の条件に達したプロデューサに対する秒当たりの最小メッセージ数。これはプロデューサのフロー制限の下限値。つまり、フロー制限が [最小フロー] に達したプロデューサの処理速度は WebLogic JMS によってそれ以上落とされない。
[フロー間隔]
プロデューサが [最大フロー] のメッセージ数から [最小フロー] に、またはその反対にフローを調整するときの調整期間 (秒単位)。
[フロー ステップ]
プロデューサがフローを [最大フロー] のメッセージ数から [最小フロー] に、またはその反対にフローを調整する場合に使用されるステップ数。具体的には、[フロー間隔] の調整期間が [フロー ステップ] 数に分割される (たとえば、60 秒を 6 ステップで除算するとステップあたり 10 秒になる)。
また、[最大フロー] と [最小フロー] の差をステップに分割することにより、移動 (調整率) が計算される。各フロー ステップでは、次のように、現在の条件に基づき必要に応じてフローが上方または下方に調整される。
  • 下方への移動は、[フロー間隔] で指定した時間の経過に伴い、[フロー ステップ] で指定した値に従って幾何的に減衰する (たとえば、100、50、25、12.5)。
  • 上方移動は線形。差は単にフロー ステップ数で除算される。

フロー制御フィールドの詳細、およびその有効値とデフォルト値については、Administration Console オンライン ヘルプの「JMS 接続ファクトリ : コンフィグレーション : フロー制御」を参照してください。

フロー制御のしきい値

バイト数またはメッセージ数のしきい値のコンフィグレーションに使用する属性は、JMS サーバまたはその送り先の一部として定義されます。表 13-3 に、上限しきい値と下限しきい値が JMS サーバまたは JMS 送り先のフロー制御を開始および停止する仕組みを示します。

表 13-3 フロー制御しきい値パラメータ
属性
説明
[最大バイトしきい値] または [最大メッセージしきい値]
バイト数またはメッセージ数がこのしきい値を超えると、JMS サーバまたは JMS 送り先は防御状態になり、プロデューサに対してメッセージ フローを制限するよう指示が行われる。
[最小バイトしきい値] または [最小メッセージしきい値]
バイト数またはメッセージ数がこのしきい値を下回った場合、JMS サーバまたは JMS 送り先は防御状態になり、プロデューサに対してメッセージ フローを増やし始めるよう指示が行われる。
フロー制御は、メッセージの最大フローを下回っているプロデューサについては、引き続き有効である。プロデューサは、最大フローに到達してフロー制御が行われなくなるまで、プロダクション率を上げ続けることができる。

JMS サーバおよび送り先のその他のしきい値フィールドと割り当てフィールドの詳細、およびそれらの有効値とデフォルト値については、Administration Console オンライン ヘルプの以下のページを参照してください。

 


期限切れメッセージの処理

以下の節では、メッセージの有効期限ポリシーとアクティブな有効期限処理という 2 つのメッセージ有効期限機能について説明します。これらの機能を使用すると、期限切れメッセージを検索する方法とそれらを検出したときの処理方法をより細かく制御できます。

アクティブなメッセージ有効期限を使用すると、期限切れメッセージが即座に消去されます。さらに期限切れメッセージの監査を使用すると、メッセージがいつ期限切れになったかをログに書き込むか、または期限切れメッセージを定義済みのエラー送り先にリダイレクトすることによって、期限切れメッセージを追跡できます。

メッセージ有効期限ポリシーの定義

有効期限ポリシーを使用して、メッセージが期限切れになったときに実行するアクションを定義します。[送り先] ノードの [有効期限ポリシー] では、送り先ごとに有効期限ポリシーを設定できます。[有効期限ポリシー] 属性を使用すると、期限切れメッセージの検出時に送り先で実行されるアクション (メッセージの破棄、メッセージの破棄とログへの書き込み、またはエラー送り先へのリダイレクト) を定義できます。

また、JMS テンプレートを使用して複数の送り先をコンフィグレーションする場合、[有効期限ポリシー] フィールドを使用して、すべての送り先の有効期限ポリシーをすばやくコンフィグレーションできます。特定の送り先に関するテンプレートの有効期限ポリシーをオーバーライドするには、その送り先の有効期限ポリシーを変更します。

有効期限ポリシーのコンフィグレーション手順については、以下のリンクをクリックしてください。

トピックの有効期限ポリシーをコンフィグレーションする

JMS テンプレートを使用せずにトピックの有効期限ポリシーをコンフィグレーションする場合は、次の手順に従います。特定のトピックに有効期限ポリシーを設定すると、JMS テンプレートに定義されている設定はオーバーライドされます。

  1. Administration Console オンライン ヘルプの「トピック メッセージ配信の失敗オプションのコンフィグレーション」の説明に従って、[JMS トピック : コンフィグレーション : 配信の失敗] ページに移動します。
  2. [有効期限ポリシー] リスト ボックスから、有効期限ポリシー オプションを選択します。
    • [破棄] - 期限切れのメッセージがメッセージング システムから削除される。削除はログに記録されず、メッセージは別の場所にリダイレクトされません。
    • [ログ] - 期限切れのメッセージを削除し、メッセージがシステムから削除されたことを示すエントリをサーバ ログ ファイルに書き込みます。次の手順で、ログに書き込まれる実際の情報を [有効期限ログ ポリシー] フィールドで定義します。
    • [リダイレクト] - 期限切れメッセージを現在の場所からトピックに対して定義されたエラー送り先に移動する。
    • トピックの有効期限ポリシー オプションの詳細については、Administration Console オンライン ヘルプの「JMS トピック : コンフィグレーション : 配信の失敗」を参照してください。

  3. 前の手順で [ログ] ポリシーを選択した場合、[有効期限ログ ポリシー] フィールドを使用して、メッセージのどの情報をログに記録するかを定義します。
  4. [有効期限ログ ポリシー] の有効値の詳細については、「有効期限ログ ポリシーを定義する」を参照してください。

  5. [保存] をクリックします。

キューの有効期限ポリシーをコンフィグレーションする

JMS テンプレートを使用せずにキューの有効期限ポリシーをコンフィグレーションする場合は、次の手順に従います。特定のキューに有効期限ポリシーを設定すると、JMS テンプレートに定義されている設定はオーバーライドされます。

  1. Administration Console オンライン ヘルプの「キューに関するメッセージ配信の失敗オプションのコンフィグレーション」の説明に従って、[JMS キュー : コンフィグレーション : 配信の失敗] ページに移動します。
  2. [有効期限ポリシー] リスト ボックスから、有効期限ポリシー オプションを選択します。
    • [破棄] - 期限切れのメッセージがメッセージング システムから削除される。削除はログに記録されず、メッセージは別の場所にリダイレクトされません。
    • [ログ] - 期限切れメッセージをキューから削除し、メッセージがシステムから削除されたことを示すエントリをサーバ ログ ファイルに書き込む。次の手順で、ログに書き込まれる実際の情報を [有効期限ログ ポリシー] フィールドで定義します。
    • [リダイレクト] - 期限切れメッセージをキューから、キューに対して定義されたエラー送り先に移動する。
    • キューの有効期限ポリシー オプションの詳細については、Administration Console オンライン ヘルプの「JMS キュー : コンフィグレーション : 配信の失敗」を参照してください。

  3. 前の手順で [ログ] ポリシーを選択した場合、[有効期限ログ ポリシー] フィールドを使用して、メッセージのどの情報をログに記録するかを定義します。
  4. [有効期限ログ ポリシー] の有効値の詳細については、「有効期限ログ ポリシーを定義する」を参照してください。

  5. [保存] をクリックします。

テンプレートの有効期限ポリシーをコンフィグレーションする

JMS テンプレートを使用すると、似た属性設定を持つ複数の送り先 (トピックまたはキュー) を効率的に定義できます。このため、送り先用の既存のテンプレート上でメッセージ有効期限ポリシーをコンフィグレーションできます。

  1. Administration Console オンライン ヘルプの「JMS テンプレート メッセージ配信の失敗パラメータのコンフィグレーション」の説明に従って、[JMS テンプレート : コンフィグレーション : 配信の失敗] ページに移動します。
  2. [有効期限ポリシー] リスト ボックスから、有効期限ポリシー オプションを選択します。
    • [破棄] - 期限切れのメッセージがメッセージング システムから削除される。削除はログに記録されず、メッセージは別の場所にリダイレクトされません。
    • [ログ] - 期限切れのメッセージを削除し、メッセージがシステムから削除されたことを示すエントリをサーバ ログ ファイルに書き込みます。ログに書き込まれる実際の情報は、次の手順に示す [有効期限ログ ポリシー] で定義します。
    • [リダイレクト] - 期限切れメッセージを現在の場所から送り先に対して定義したエラー送り先に移動する。
    • テンプレートの有効期限ポリシー オプションの詳細については、Administration Console オンライン ヘルプの「JMS テンプレート : コンフィグレーション : 配信の失敗」を参照してください。

  3. 前の手順で [ログ] ポリシーを選択した場合、[有効期限ログ ポリシー] フィールドを使用して、メッセージのどの情報をログに記録するかを定義します。
  4. [有効期限ログ ポリシー] の有効値の詳細については、「有効期限ログ ポリシーを定義する」を参照してください。

  5. [保存] をクリックします。

有効期限ログ ポリシーを定義する

注意: [有効期限ログ ポリシー] パラメータはこのリリースの WebLogic Server では非推奨となっています。代わりに、メッセージ ライフ サイクルのロギング機能を使用することをお勧めします。この機能を使用すると、JMS サーバに届いた JMS メッセージに発生する基本的なイベントを、詳細な有効期限データも含め包括的に把握できます。メッセージ ライフ サイクルのロギング オプションの詳細については、『WebLogic JMS のコンフィグレーションと管理』の「メッセージ ライフ サイクルのロギング」を参照してください。

[有効期限ポリシー] が [ログ] に設定されている場合、[有効期限ログ ポリシー] で、メッセージに関するどの情報がログに書き込まれるかを定義します。[有効期限ログ ポリシー] の有効値は、%header%%properties%、JMS 仕様で定義されている JMS ヘッダ プロパティ、WebLogic JMS 固有の拡張ヘッダ フィールドの JMSDeliveryTimeJMSRedeliveryLimit、およびユーザ定義のプロパティです。各プロパティは、カンマで区切る必要があります。

%header% 値は、ヘッダ フィールドがログに書き込まれることを示します。%properties% 値は、ユーザ プロパティがログに書き込まれることを示します。どちらの値も、大文字と小文字は区別されません。ただし、個別の JMS ヘッダ フィールドおよびユーザ プロパティの列挙値は、大文字と小文字が区別されます。

たとえば、以下のいずれかの値を指定できます。

JMSMessageID フィールドは常にログに書き込まれ、無効にはできません。したがって、有効期限ポリシーが定義されていない ([なし]) か、空の文字列として定義されている場合、ログ ファイルへの出力にはメッセージの JMSMessageID のみが含まれます。

有効期限ログの出力形式

期限切れメッセージがログに書き込まれる場合、メッセージのテキスト部分 (タイムスタンプ、重大度、スレッド情報、セキュリティ ID などを除く) は以下のフォーマットに準拠します。

<ExpiredJMSMessage JMSMessageId='$MESSAGEID' >
<HeaderFields Field1='Value1' [Field2='Value2'] ... ] />
<UserProperties Property1='Value1' [Property='Value2'] ... ] />
</ExpiredJMSMessage>

$MESSAGEIDMessage.getJMSMessageID() によって返される文字列です。

次に例を示します。

<ExpiredJMSMessage JMSMessageID='ID:P<851839.1022176920343.0' >
<HeaderFields JMSPriority='7' JMSRedelivered='false' />
<UserProperties Make='Honda' Model='Civic' Color='White'
Weight='2680' />
</ExpiredJMSMessage>

ヘッダ フィールドが表示されない場合、ヘッダ フィールド行は表示されません。ユーザ プロパティが表示されない場合、その行は表示されません。ヘッダ フィールドとプロパティが存在しない場合、開始タグは閉じ括弧 (/>) で閉じることができるので終了タグ </ExpiredJMSMessage> は必要ありません。

次に例を示します。

<ExpiredJMSMessage JMSMessageID='ID:N<223476.1022177121567.1' />

すべての値は引用符で区切られます。すべての文字列値は 32 文字に制限されます。要求されたフィールドまたはプロパティが存在しない場合、それらは表示されません。要求されたフィールドまたはプロパティが存在するが値がない (null 値) 場合、それらは null として (単一引用符なしで) 表示されます。要求されたフィールドまたはプロパティが空文字の場合、それらは 1 組の単一引用符 (間にスペースなし) として表示されます。

次に例を示します。

<ExpiredJMSMessage JMSMessageID='ID:N<851839.1022176920344.0' >
<UserProperties First='Any string longer than 32 char ...'
Second=null Third='' />
</ExpiredJMSMessage>

アクティブなメッセージ有効期限のチューニング

アクティブな有効期限処理機能を使用すると、期限切れメッセージをそれが送信またはパブリッシュされた送り先から削除するタイミングを定義できます。メッセージは必ずしも有効期限に削除されず、ユーザ定義の秒数以内に削除されます。秒数が少ないほど、メッセージの削除が実際の有効期限に近づきます。

送り先をアクティブにスキャンして期限切れメッセージを処理するように JMS サーバをコンフィグレーションする

JMS サーバが送り先をアクティブにスキャンして期限切れメッセージを処理する方法を定義するには、次の手順に従います。デフォルト値は 30 秒です。つまり、JMS サーバは各スキャンの間で 30 秒待機します。

  1. Administration Console オンライン ヘルプの「JMS サーバに関する一般的なプロパティのコンフィグレーション」の説明に従って、[JMS サーバ : コンフィグレーション : 全般] ページに移動します。
  2. [有効期限スキャン間隔] フィールドに、JMS サーバが送り先をスキャンして期限切れメッセージを処理するサイクルの休止間隔を秒数で入力します。
  3. アクティブなスキャンを無効にするには、0 を入力します。期限切れメッセージは、検出時にシステムからパッシブに削除されます。

    [有効期限スキャン間隔] 属性の詳細については、Administration Console オンライン ヘルプの「JMS サーバ : コンフィグレーション : 全般」を参照してください。

  4. [保存] をクリックします。

設計上の選択には、JMS アプリケーションのパフォーマンスに影響を与えるものが多数あります。信頼性、スケーラビリティ、管理容易性、モニタ、ユーザ トランザクション、メッセージ駆動型 Bean のサポート、アプリケーション サーバとの統合などの要素がパフォーマンスに影響します。また、WebLogic JMS の拡張と機能もパフォーマンスに直接的な影響を与えます。

お使いのアプリケーションを JMS に対応するように設計する方法については、『WebLogic JMS プログラマーズ ガイド』の「アプリケーション設計のベスト プラクティス」を参照してください。

 


順序単位を使用したアプリケーションのチューニング

メッセージ順序単位は WebLogic Server の付加価値機能です。スタンドアロンのメッセージ プロデューサや、単体として動作するプロデューサのグループは、この機能を使用して複数のメッセージを処理順序 (下位順序) に応じた 1 つの単位にグループ化できます。この単位を順序単位 (UOO) と呼び、この単位にまとめられたすべてのメッセージは作成順に従って処理されます。以下の複雑な設計パターンについて UOO を使用するように置き換えます。

『WebLogic JMS プログラマーズ ガイド』の「メッセージ順序単位の使用」を参照してください。

ベスト プラクティス

以下の節では、UOO 使用時のベスト プラクティスについて説明します。

UOO と分散送り先の使用

分散送り先を使用している場合、厳格なメッセージ順序を確実に適用するために、各 UOO は特定の物理的送り先のインスタンスに固定されます。所定の UOO に対して自動的に適切な物理的送り先を決定するため、以下の 2 つのオプションが用意されています。

UOO を使用するように古いアプリケーションを移行する

WebLogic Server 9.0 より前のリリースでは、厳格なメッセージ順序要件のあるアプリケーションで以下のことを行う必要がありました。

UOO を使用すると複数のコンシューマを利用でき、非同期コンシューマのメッセージ バックログのサイズを任意で指定できるので、こうした要件が大幅に緩和されます。古いアプリケーションを移行して UOO を利用できるようにするには、単純に物理的送り先にデフォルトの UOO 名をコンフィグレーションします。Administration Console オンライン ヘルプの「接続ファクトリの順序単位パラメータのコンフィグレーション」および『WebLogic JMS プログラマーズ ガイド』の「メッセージの再配信の順序付け」を参照してください。

 


一方向メッセージ送信による非永続メッセージングのパフォーマンスの向上

一方向メッセージ送信は、送信側によってボトルネックとされているアプリケーションのパフォーマンスを大幅に向上させることが可能ですが、QOS (サービス品質) が低下するリスクを伴います。JMS プロデューサからの一般的なメッセージ送信は、内部要求と内部応答の両方が含まれることから、「双方向送信」と呼ばれています。プロデューサ アプリケーションが send() を呼び出すと、この呼び出しは、アプリケーションのメッセージが含まれる要求を生成し、そのメッセージの受信を確認するまで JMS サーバからの応答を待機します。この呼び出し/応答メカニズムでは、プロデューサが制御されます。これは、プロデューサ アプリケーションは、別の送信呼び出しを行うことができるようになるまで、JMS サーバの応答を待機するように強いられるためです。応答メッセージを無くすことによって、この待機時間も無くなり、「一方向送信」となります。WebLogic Server では、非永続、非トランザクションのメッセージ処理に対してコンフィグレーション可能な一方向送信オプションがサポートされています。この機能は、アプリケーション コードを変更することなく利用できます。

一方向送信モードのオプションを有効にすると、ユーザ定義の接続ファクトリで作成したメッセージ プロデューサで、一方向メッセージ送信ができるようになります (可能な場合)。一方向メッセージ送信が可能な場合、関連付けられたプロデューサは、対象送り先のホスト JMS サーバからの応答を内部で待機することなく、メッセージを送信できます。キュー センダおよびトピック パブリッシャに一方向送信を許可したり、この機能をトピック パブリッシャのみに制限したりできます。一方向ウィンドウ サイズを指定して、追加の一方向送信を続行する前に、プロデューサを制御するために双方向メッセージが必要になる時期を決定する必要があります。

接続ファクトリでの一方向送信のコンフィグレーション

接続ファクトリの一方向メッセージ送信パラメータは、Administration Console を使用してコンフィグレーションします。詳細については、Administration Console オンライン ヘルプの「接続ファクトリのフロー制御のコンフィグレーション」を参照してください。また、FlowControlParamsBean MBean を介した JMX または WebLogic Scripting Tool (WLST) の使用も可能です。

注意: 接続ファクトリが「XA 対応」としてコンフィグレーションされている場合、一方向メッセージ送信は無効になります。この設定では、送信側が実際にトランザクションを使用しているかどうかに関係なく、一方向送信が無効になります。

送り先が 1 つの場合のクラスタにおける一方向送信のサポート

送り先が 1 つの場合のクラスタで一方向送信をサポートするには、送り先をホストしている JMS サーバと接続ファクトリが、同じ WebLogic サーバに対象指定されていることを確認します。接続ファクトリが、クラスタ内のその他の WebLogic Server インスタンスに対象指定されている場合はサポートされません。

送り先が複数の場合のクラスタにおける一方向送信のサポート

同じ名前を共有する送り先が複数ある場合のクラスタで一方向送信をサポートするには、クライアント接続をホストしている WebLogic Server インスタンスでもその送り先を確実にホストする必要があります。1 つのソリューションを次に示します。

  1. クラスタワイドの RMI ロード バランシング アルゴリズムを「サーバ アフィニティ」にコンフィグレーションします。
  2. 2 つの送り先が同じ WebLogic Server インスタンスでホストされていないことを確認します。
  3. 各送り先が同じ local-jndi-name を持つようにコンフィグレーションします。
  4. 送り先をホストしている WebLogic Server インスタンスにのみ対象指定されている接続ファクトリをコンフィグレーションします。
  5. JNDI コンテキストから接続ファクトリおよび送り先を取得するために、送信側クライアントにおいて、手順 3 および 4 でコンフィグレーションした JNDI 名が使用されるようにします。
  6. 手順 3 の送り先をホストしている WebLogic Server インスタンスにのみ制限されている URL を送信側クライアントが使用するようにします。

このソリューションでは、EJB ホームおよび JMS 接続ファクトリを含む、クラスタ化された RMI オブジェクト用の RMI レベルのロード バランシングは無効にされます。クライアントは JNDI コンテキストの確立に使用されるネットワーク アドレスにのみ基づいて接続および送り先を効率的に取得します。ロード バランシングは、WebLogic Server アドレスのカンマ区切りのリストが含まれる複数の URL、または、ネットワーク管理者によってコンフィグレーションされる IP アドレスの「ラウンドロビン」セットに解決される DNS 名を指定する複数の URL に対して行われる、「ネットワーク ロード バランシング」を利用することによって達成されます。

クラスタのサーバ アフィニティの詳細については、『WebLogic Server クラスタ ユーザーズ ガイド』の「EJB と RMI オブジェクトのロード バランシング」を参照してください。

一方向送信がサポートされないケース

この節では、一方向送信がサポートされないケースを示します。一方向送信がサポートされない場合、送信の QOS は、標準の双方向に自動的にアップグレードされます。

クライアントと送り先のホストが異なる

一方向送信は、対象送り先をホストしている JMS サーバとクライアント プロデューサの接続ホストが、同じ WebLogic Server インスタンスである場合にサポートされます。これらが同じでない場合、一方向モード設定は無視され、標準の双方向送信が代わりに使用されます。

クライアントのホスト接続ファクトリで XA が有効である

クライアントのホスト接続ファクトリが「XA 対応」としてコンフィグレーションされている場合、一方向メッセージ送信は無効になります。この設定では、送信側が実際にトランザクションを使用しているかどうかに関係なく、一方向送信が無効になります。

高度な QOS が検出された

次に示す、より高度な QOS 機能が検出された場合には、一方向モードの設定は無視され、代わりに標準の双方向送信が使用されます。

送り先割り当てを超過している

対象送り先で指定された割り当てを超過している場合、その割り当てがクリアになるまで標準の双方向送信が使用されます。

割り当てを超過する一方向メッセージは、例外がクライアントに即座に返されることなく、通知のないまま削除されます。クライアントは、次の双方向送信が行われる際、送り先が割り当てをまだ超過している場合に、割り当ての例外を取得することになります。(一方向モードでも、クライアントは、クライアントの接続ファクトリでコンフィグレーションされた [一方向送信ウィンドウ サイズ] のメッセージ数ごとに双方向メッセージを送信します)。

割り当て条件内で通知なしにメッセージが削除されるのを回避できる 1 つの方法は、接続ファクトリでコンフィグレーションされる [Blocking Send Timeout] の値を増やすことです (「メッセージの圧縮」を参照)。一方向メッセージは、即座に削除されることはありませんが、メッセージが消費されるか、期限切れになることによって割り当て条件がクリアになるまでの一定時間、JMS サーバで待機することになります。クライアントの送信側は、双方向メッセージを送信するまでブロックすることはありません。各クライアントに対して、一方向ウィンドウ サイズの数を超えるメッセージが割り当て条件がクリアになるのを待機してサーバ上で蓄積されることはありません。

サーバ セキュリティ ポリシーにおける変更

サーバサイドのセキュリティ ポリシーで変更があると、JMS クライアントがその変更をセキュリティ ステータスで通知されることなく、一方向メッセージ送信ができなくなる場合があります。

JMS サーバまたは送り先ステータスにおける変更

ホスト JMS サーバや対象送り先が管理上の理由からアンデプロイされている場合、または、「生成の休止/再開」機能を使用して JMS サーバや対象送り先のいずれかにおいてメッセージ生成が休止されている場合、一方向送信は無効になる場合があります。詳細については、『WebLogic JMS のコンフィグレーションと管理』の「生成の休止と生成の再開」を参照してください。

論理分散送り先名がルックアップされる

一方向メッセージ送信が分散送り先で機能するのは、クライアントが、論理分散送り先の名前を使用するのではなく、物理分散送り先メンバーを直接ルックアップする場合です。詳細については、『WebLogic JMS プログラマーズ ガイド』の「分散送り先の使用」にある「分散送り先メンバーへのアクセス」を参照してください。

ハードウェアに障害がある

ハードウェアまたはネットワークに障害があると、一方向送信は無効になります。こうした場合、JMS プロデューサは、OnException または次の双方向メッセージ送信によって通知されます (一方向モードでも、クライアントは、クライアントの接続ファクトリでコンフィグレーションされた [一方向送信ウィンドウ サイズ] のメッセージ数ごとに双方向メッセージを送信します)。さらに、プロデューサが閉じられます。最悪の場合、障害が発生した直前の最後の双方向メッセージまでのすべてのメッセージが失われる場合があります。

一方向送信の QOS の注意事項

一般的な非永続メッセージングで一方向送信モードを使用する場合は、次の QOS 関連のガイドラインを使用します。

 


送り先のパフォーマンスのチューニング

JMS 送り先の [メッセージング パフォーマンスのオプション] というチューニング オプションを使用すると、コンシューマに配信可能なメッセージの完全なバッチが作成されるまで送り先が待機する時間 (必要がある場合) を制御できるようになります。最小値の場合、バッチ処理は無効になります。デフォルト値よりも大きな値にチューニングすると、使用できるメッセージをバッチ処理するまで送り先が待機する時間が延長されます。完全なバッチの最大メッセージ数は、JMS 接続ファクトリの [セッションあたりの最大メッセージ数] 設定で制御されます。

この高度なオプションは Administration Console から利用できます。スタンドアロンおよび共通分散送り先 (DestinationBean API でも可能)、または JMS テンプレート (TemplateBean API でも可能) の全般コンフィグレーションのページを使用して設定します。

具体的に言うと、JMS 送り先には、メッセージをバッチにまとめてコンシューマへ配信することにより、自動的にパフォーマンスを最適化しようとする内部アルゴリズムがあります。メッセージ レートや他の要因の変化に応じて、こうしたアルゴリズムでバッチのサイズや配信時間が変更されます。ただし、このようなアルゴリズムですべてのメッセージング環境のパフォーマンスを最適化することはできません。[メッセージング パフォーマンスのオプション] を指定することで、メッセージ レートや他の要因の変更に応じたアルゴリズムの対応方法を変更して、システムのパフォーマンスを調整できます。

メッセージング パフォーマンスのコンフィグレーション パラメータ

[メッセージング パフォーマンスのオプション] には、以下のコンフィグレーション パラメータがあります。

表 13-4 [メッセージング パフォーマンスのオプション] の値
Administration Console の値
MBean の値
説明
[メッセージをバッチ処理しない]
0
メッセージのバッチ処理を事実上無効にする。利用可能なメッセージは即座にコンシューマへ配信される。

注意: これは、接続ファクトリの [セッションあたりの最大メッセージ数] フィールドを「1」に設定した場合に相当する。

[待機せずメッセージをバッチ処理]
25 (デフォルト)
完全に満たないバッチが、利用可能なメッセージを含んだ状態で即座に配信される。

注意: これは、接続ファクトリの [セッションあたりの最大メッセージ数] フィールドに設定した値に相当する。

[メッセージ バッチ処理の最小待機しきい値]
50
短期間だけ待機した後で、完全に満たないバッチが利用可能なメッセージを含んだ状態で配信される。
[メッセージ バッチ処理の中間待機しきい値]
75
場合に応じてより長く待機した後で、完全に満たないバッチが利用可能なメッセージを含んだ状態で配信される。
[メッセージ バッチ処理の最大待機しきい値]
100
場合に応じてさらに長く待機した後で、完全に満たないバッチが利用可能なメッセージを含んだ状態で配信される。

お使いのシステムに最適な値を見つけるためには、ある程度の実験が必要な場合もあります。たとえば、並列する多数のメッセージ コンシューマが設定されたキューの場合、Administration Console で [メッセージをバッチ処理しない] という値を選択 (または DestinationBean MBean に「0」を指定) すると、そのキューではコンシューマが利用可能になるとすぐに、できるだけ早くそのコンシューマにメッセージを送出しようとします。反対に、迅速な応答が求められないメッセージ コンシューマが 1 つだけ設定されているキューの場合、Administration Console で [メッセージ バッチ処理の最大待機しきい値] という値を選択 (または DestinationBean MBean に「100」を指定) すると、そのキューではメッセージをバッチの形でのみコンシューマに送出しようとし、結果として待機時間は増加しますが、送出回数が少なくなるのでサーバ全体のスループットが向上する場合があります。

スタンドアロンの送り先、共通分散送り先、または JMS テンプレートに対して、Administration Console で [メッセージング パフォーマンスのオプション] パラメータをコンフィグレーションする手順については、Administration Console オンライン ヘルプの以下の節を参照してください。

これらのパラメータの詳細については、『WebLogic Server MBean Reference』の「DestinationBean」と「TemplateBean」を参照してください。

非同期メッセージ パイプラインとの互換性

[メッセージング パフォーマンスのオプション] は、非同期メッセージ パイプラインを使用する非同期コンシューマに対応しています。また、同期コンシューマのプリフェッチ モード機能 (非同期メッセージ パイプラインの模擬機能) を使用する同期コンシューマにも対応します。ただし、[最大メッセージ数] に設定されている値が小さすぎると、送り先のより高いレベルのパフォーマンス アルゴリズム (たとえば、[メッセージ バッチ処理の最小待機しきい値]、[メッセージ バッチ処理の中間待機しきい値]、[メッセージ バッチ処理の最大待機しきい値]) の影響が無効になる場合があります。非同期メッセージ パイプラインの詳細については、『WebLogic JMS プログラマーズ ガイド』の「メッセージの受信」を参照してください。


  ページの先頭       前  次