Sun Java System Application Server Enterprise Edition 8.2 パフォーマンスチューニングガイド

メッセージ駆動型 Beans のチューニング

この節では、JMS とメッセージ駆動型 Beans (MDB) を使用しているときにパフォーマンスを改善するためのヒントを示します。

getConnection() を使用する

JMS 接続は接続プールから供給されます。これは、Queue 接続ファクトリに対する getConnection() の呼び出しが高速であることを意味します。


注意 – 注意 –

8.1 よりも前のバージョンでは、サーブレットまたは EJB コンポーネントとの接続の再利用が可能でした。つまり、サーブレットはその init() メソッド内で getConnection() を呼び出し、その後連続的に、各サーブレット呼び出しに対して getSession() を呼び出すことができました。グローバルトランザクションの内部で JMS を使用する場合、そのような呼び出しは機能しなくなりました。アプリケーションは各接続に対し getSession() を一度だけ呼び出すことができます。その後、接続をクローズする必要があります (これは実際には接続をクローズするのではなく、接続をプールに戻すだけである)。これは、移植性のある J2EE 1.4 アプリケーションの一般的な特徴です。Sun Java System Application Server では、以前の (J2EE 1.3 ベースの) アプリケーションサーバーでは施行されていなかったその制約を施行します。


メッセージ駆動型 Bean のプールサイズを調整する

メッセージ駆動型 Beans のコンテナは、エンティティー Beans およびセッション Beans のコンテナとは異なります。MDB コンテナでは、セッションおよびスレッドが MDB プール内の Beans に添付されます。この設計により、メッセージ駆動型要求をコンテナ内で実行するためのスレッドをプールできるようになっています。

メッセージ駆動型 Bean のプールサイズを調整し、メッセージの同時処理数を最適化します。サーバーのすべてのパラメータに基づいて、MDB プールのサイズを設定します (ほかのアプリケーションを考慮に入れる)。たとえば、500 を超える値は一般的には大きすぎます。

MDB プールの設定は、管理コンソールで「設定」、「<設定名>」、「EJB コンテナ」(「MDB 設定」) の順に選択して行うことができます。また、次のように asadmin を使用して設定することもできます。

asadmin set server.mdb-container.max-pool-size = value

Bean 固有リソースをキャッシュする

setMesssageDrivenContext() または ejbCreate() メソッドを使用して、Bean 固有リソースをキャッシュし、ejbRemove() メソッドでそれらのリソースを解放します。

JMS 接続の使用を制限する

JMS 接続を使用するアプリケーションを設計するときは必ず、接続をプールするか、または複数のセッションで同じ接続を使用することによって、使用する接続数を抑える方法論を使用します。

JMS 接続は 2 つのスレッドを使用し、セッションはそれぞれ 1 つのスレッドを使用します。これらのスレッドはプールから取得されたものではなく、結果のオブジェクトはプールされないため、利用負荷の高い期間中はメモリー不足が発生する可能性があります。

1 つの回避方法は、createTopicConnection をサーブレットの init に移動することです。

必ず、セッションを明示的にクローズしてください。クローズしないとセッションはオープン状態のままであり、リソースを解放しません。