Session Beanのチューニングについて、説明します。
リソースを効果的に利用するために、Session Beanにおいては以下の設定を行います。
■STATEFULとSTATELESSの選択
STATELESS Session Beanを使用することで、メモリ資源やオブジェクトの生成回数が抑止されるため、処理性能が向上します。
STATEFULとSTATELESSには以下の違いがありますので、用途に合わせて使い分けてください。
| STATEFUL | STATELESS |
---|---|---|
対話状態 | createからremoveまで同一のオブジェクトにアクセスするため、クライアントとの対話状態を保持することができる。 | クライアントとの対話状態を持たないため、クライアントが情報を保持する必要がある。 |
トランザクション | Session Beanのsynchronization機能を使って、トランザクションとの同期が可能。 | 1メソッド内でトランザクションを完了させる必要がある。 |
性能 | クライアントごとにEJB objectを生成するため、STATELESSに比べてメモリ使用量が多い。 | インスタンスやEJB objectを使い回すため、メモリ使用量を抑止することができる。また、オブジェクトの生成回数が抑止される。 |
■STATEFUL Session Beanの無通信監視
createメソッドで作成したオブジェクトに対してremoveメソッドを実行せずに終了した場合、残存するオブジェクトを自動的に消去するため、不要なメモリの増加を防ぐことができます。
デフォルト値は、30(分)です。
■Session Beanのcreateメソッド実行数の上限
createメソッド実行数を高負荷の実行環境に合わせて変更できます。
以下の計算式で算出された値が、デフォルト値の1024を超過する場合には、Session Beanのcreateメソッド実行数の上限値を変更してください。createメソッド実行数はInterstage管理コンソールで設定します。
(クライアントアプリケーションのプロセス数)×(1プロセス数あたりの実行スレッド数の平均) |
createメソッドで作成したオブジェクトをremoveメソッドで削除しなかった場合、無通信監視機能でタイムアウトが発生するまでオブジェクトが残存するため、メモリの使用量が多くなる可能性があります。create数の上限値は適切な値に設定してください。
設定範囲
種類 | 設定値 |
---|---|
初期設定値 | 1024 |
最小値 | 1 |
最大値 | 2147483647 |
■STATELESS Session Beanの起動時インスタンス生成
IJServer起動時に、STATELESS Session Beanのインスタンスを作成しておくことでアクセス時のインスタンス作成時間が省略され、処理性能が向上します。
設定は、Interstage管理コンソールの[システム] > [ワークユニット] > “ワークユニット名” > “EJBモジュール” > “EJBアプリケーション名” > [アプリケーション環境定義]タブの[Interstage拡張情報]で行います。デフォルトは“しない”です。
設定範囲
種類 | 設定値 |
---|---|
最小値(デフォルト) | 0 |
最大値 | 2147483647 |
初期起動インスタンス数を増やした場合、使用するヒープ量が増えるため注意してください。
初期起動インスタンス数を1以上に指定した場合、setSessionContext、またはejbCreateメソッドから以下の操作、またはアクセスはできません。
javax.ejb.TimerServiceメソッド
javax.ejb.Timerメソッド
他のEJBアプリケーションへのアクセス
リソースマネージャ(データベースなど)へのアクセス
作成されたインスタンスは削除されないため、実行時の同時処理数以上に初期起動インスタンス数を設定しないよう、注意してください。
実行時の同時処理数の上限は、以下の式で算出してください。
IJServerタイプが“WebアプリケーションとEJBアプリケーションを同一JavaVMで運用”の場合
Servletコンテナ設定の同時処理数 + Message-driven Beanの同時処理数の最大値
IJServerタイプが“WebアプリケーションとEJBアプリケーションを別JavaVMで運用”または“EJBアプリケーションのみ運用”の場合
EJBコンテナ設定のIIOP呼び出しの同時処理数の最大値 + Message-driven Beanの同時処理数の最大値