Message-driven Beanのインスタンス数を設定することにより、同時にメッセージ処理を行うことができます。
目安としては、キューにメッセージが蓄積されない程度のインスタンス数を設定します。ただし、クライアント数とMessage-driven Bean処理時間に依存するため、環境に合わせ試験運用を行い、調整後に設定してください。
■Message-driven Beanのスレッドプール
Point-To-Point、または、Publish/SubscriberメッセージングモデルのMessage-driven Beanのメッセージ受信時にプールしたスレッドを利用してメッセージ受信処理を行います。
このプールされたスレッド数のことをMessage-driven Beanの同時処理数と呼びます。
以下の条件に該当するMessage-driven Beanの場合、スレッド多重でのメッセージ受信をサポートしていないため、スレッドプールは使用されません。
条件A | 条件B | |
---|---|---|
メッセージングモデル | Publish/Subscriber | Publish/Subscriber |
トランザクション管理種別 | Container | Bean |
トランザクション属性 | Required | - |
スレッドプールの単位
IJServerプロセスに1つ作成し、プールしているスレッドはIJServerに配備されているすべてのMessage-driven Beanのメッセージ受信処理で共有されます。
スレッドの作成について
IJServerプロセス起動時にMessage-driven Beanの最小同時処理数のスレッドを作成してプールに格納します。
メッセージが配信されると、メッセージの処理開始前にプールを検索し、プールにスレッドが存在しない場合、および現在利用されているスレッド数がMessage-driven Beanの最大同時処理数より小さい場合に、スレッドを作成して受信処理を行います。
受信完了後、作成したスレッドは削除されることなくプールに返却されます。
プールにスレッドが存在しない場合で、現在利用されているスレッド数がMessage-driven Beanの最大同時処理数を超過している場合は、現在利用されるスレッドがプールに返却されるまで待機し、プールに返却されたスレッドを取得して受信処理を行います。
スレッドの削除について
プーリングされたスレッドは、アイドルタイムアウトによって破棄されます。スレッドがプールに返却されてから指定した時間を超過しても使用されないスレッドが存在する場合には、そのスレッドを破棄します。
ただし、初期起動スレッド数分はプーリングされ続けますので破棄対象外となります。また、IJServerプロセスが停止するとスレッドも削除されます。
スレッドプールのチューニング
Interstage管理コンソールまたはisj2eeadminコマンドで、スレッドプールに対して以下のチューニングを行うことができます。
Message-driven Beanの同時処理数
EJBを運用するプロセス上で、Message-driven Beanで同時に処理できる処理数(スレッド数)の最大値と最小値を指定します。
また、使用されずにプーリングされたスレッドを解放するまでの、タイムアウト時間を指定します。
設定は、Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [環境設定] > [詳細設定] > [EJBコンテナ設定]で行います。
または、isj2eeadminコマンドで設定することも可能です。詳細は、“リファレンスマニュアル(コマンド編)”を参照してください。
項目 | 説明 | 値の説明 |
---|---|---|
最小 | IJServerプロセスの起動時に生成するスレッド数を指定します。 | 0~2147483647の整数値を指定できます。 |
最大 | 起動時に最小値だけスレッドが生成され、必要に応じて最大値までスレッドが拡張されます。 | 1~2147483647の整数値を指定できます。 |
アイドルタイムアウト | アイドルタイムアウト値を指定します。 | 0~2147483647の整数値を指定できます。 |
Message-driven Beanの同時処理数をチューニングする場合、以下を参考にしてください。
断続的に処理を実行するような場合には、常に同時に実行されるスレッド数を最小値に設定することで、スレッドの作成、破棄の処理が軽減されるためにCPU使用率が軽減されて性能が向上します。
Message-driven Beanの処理が頻繁に行われない場合には、最小値を小さく設定することで、使用メモリ量を抑えることができます。
Interstage管理コンソールのモニタ情報を参照して、アイドルタイムアウト回数が断続的に増加している場合、スレッドの生成と破棄が頻繁に発生しています。
アイドルタイムアウトの設定値が小さい可能性がありますので、アイドルタイムアウトの設定値を大きくすることを検討してください。
ただし、アイドルタイムアウトの設定値を大きく設定すると生成したスレッドがプールに滞留する時間が長くなるため、メモリの使用量も増加します。Javaのヒープ量やシステム資源も考慮して設定してください。
膨大な処理要求を受け付ける可能性がある場合、最大値を小さく指定して同時処理数を抑制することで、CPU負荷を軽減できます。
CPUの使用率が上限値に対して低い場合には、最大値を大きく設定することで、最大値に指定した値までMessage-driven Beanで同時処理できます。
各Message-driven Beanの初期起動スレッド数の合計値が、Message-driven Beanの同時処理数の最大値を上回っている場合、Message-driven Beanの同時処理数の最大値以上のメッセージがIJServerプロセスに配信される可能性があります。
その場合、使用中のスレッドがプールに返却されるまで待機します。プールに返却されるまで待機させない場合には、各Message-driven Beanの初期起動インスタンス数の合計値をInterstage管理コンソール、またはisj2eeadminコマンドで、Message-driven Beanの同時処理数の最大値に指定してください。
■異常時のメッセージ退避機能
Point-To-Pointメッセージングモデルでかつ不揮発化チャネルを利用する場合、リトライ回数を超過してもメッセージ受信を繰り返す可能性があります。
イベントチャネルのイベントデータをメモリにキャッシュする数を、イベントチャネルに蓄積できるイベントデータの最大値よりも大きく設定してください。
設定はイベントサービス運用コマンドを使用して行います。詳細は“リファレンスマニュアル(コマンド編)”の“essetcnf”および“essetcnfchnl”を参照してください。