2.17.7 cosminexus.xmlでの定義
cosminexus.xmlでは,次の項目を設定できます。
-
非同期呼び出し処理を同時に実行できるスレッド数およびスレッドの保存期間
-
非同期メソッドの処理結果保持期間のタイムアウト
cosminexus.xmlについては,マニュアル「アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「2. アプリケーション属性ファイル(cosminexus.xml)」を参照してください。
(1) 非同期呼び出し処理を同時に実行できるスレッド数およびスレッド保存期間
同時に実行できるスレッド数や,スレッドの保存期間などの属性は,cosminexus.xmlに定義します。設定するパラメタを次に示します。
-
max-thread-pool-size
プールに生成できるスレッドの最大数を指定します。
-
min-thread-pool-size
プール内で使用していないスレッドを幾つまで保存できるかを指定します。
-
thread-pool-keep-alive
使用していないスレッド数がmin-thread-pool-sizeで指定した数を超えている場合に,スレッドを終了するまでに保存しておく時間を設定します。
(2) 非同期メソッドの処理結果保持期間のタイムアウト
リモートインタフェースを使用した非同期メソッド呼び出しの処理結果を取得するためのFuture<V>オブジェクトの保持期間に,タイムアウトを設定します。タイムアウトを設定しないと,アプリケーションが停止するまで処理結果が保持されるため,処理結果が多い場合などにはメモリ使用量が増え,OutOfMemoryエラーが発生するおそれがあります。これを防ぐために,結果を保持する期間の最大値を設定します。設定するパラメタを次に示します。
-
result-timeout-value
処理結果を保持する期間(単位:分)を指定します。この期間を超えた処理結果は,EJBコンテナから削除され,参照できなくなります。
削除後に,削除された処理結果を示すFuture<V>オブジェクトのメソッドを呼び出した場合,文字列「KDJE43202-I」をメッセージに含むEJBExceptionがスローされます。例外メッセージに「KDJE43202-I」があるかどうかを確認して,タイムアウトによる削除が発生したかどうかを判断できます。
ただし,ローカルクライアントの場合,Future<V>オブジェクトはローカルに保持されているため,例外は発生しないで,メソッドは正常に終了します。
次に,非同期呼び出しを実行する場合のJavaヒープの見積もり,およびJavaヒープのチューニングをするときのポイントについて示します。
(a) 非同期呼び出しを実行する場合のJavaヒープの見積もり
リモートインタフェースを使用して非同期処理を呼び出した場合,処理結果を示すFuture<V>オブジェクトは,EJBコンテナが動作するJavaVM上で保持されます。このため,リクエスト数が多い場合,JavaVMでOutOfMemoryエラーが発生しないように留意する必要があります。
非同期呼び出しを実行する場合,非同期メソッドごとに必要なJavaヒープサイズを次の見積もり式によって見積もってください。
一つの非同期メソッドで必要なJavaヒープサイズ(単位:キロバイト)
=(1+A)×(B+C+1)×D
- (凡例)
-
A:ユーザアプリケーションに依存するオブジェクトサイズ(キロバイト)
B:非同期メソッド実行時間の平均値(分)
C:cosminexus.xmlに指定したresult-timeout-valueの値
D:1分間に呼び出される非同期メソッドの平均実行回数
非同期メソッドごとに算出した値を合計して,全体として必要なJavaヒープサイズを割り出してください。
- ポイント
-
-
この見積もり式で算出するのは,リモートインタフェースで非同期メソッドを呼び出す場合に必要なJavaヒープサイズです。ローカルインタフェースで呼び出す場合,EJBコンテナで結果が保持されないため,見積もりは不要です。
-
「ユーザアプリケーションに依存するオブジェクトサイズ」とは,処理結果オブジェクトのサイズです。通常,ユーザアプリケーションの処理結果オブジェクトのサイズについて意識する必要はありませんが,サイズが大きい場合は,テストプログラムなどで使用するサイズを測定した上で,必要に応じてJavaヒープサイズを変更してください。
-
(b) タイムアウト時間のチューニングのポイント
タイムアウト時間のチューニングでは,次のポイントを考慮して検討してください。
-
タイムアウト時間には,アプリケーションでFutureオブジェクトのisDoneメソッドが実行される間隔よりも長い値を指定してください。また,Futureオブジェクトのgetメソッドが呼び出されてから非同期メソッドが呼び出されるまでの期間よりも長い値を指定してください。
-
リソースの使用量を少なくしたい場合は,result-timeout-valueの値を小さくしてください。ただし,その場合,期間を超え,削除された処理結果にはアクセスできなくなることを考慮してください。
-
result-timeout-valueの定義は,非同期メソッドの実行時間の平均値,非同期メソッドの実行時間および1分間の実行回数の平均値を考慮して,Javaヒープメモリを消費し過ぎないサイズを算出した上で設定してください。