3.6.1 動的変更の処理の仕組み
CTMによる同時実行スレッド数の動的変更の概要を,次の図に示します。
図3-15について,(1)〜(3)で説明します。
- 〈この項の構成〉
(1) 同時実行数を動的変更する前の状態(スケジュールキューとしての同時実行数は5)
同時実行数を動的変更する前の,J2EEサーバ起動時の状態です。CTMデーモンのスケジュールキューは,J2EEサーバ1のアプリケーションとJ2EEサーバ2のJ2EEアプリケーションで共有されています。
J2EEサーバ1のJ2EEアプリケーションでは,Stateless Session Beanの属性として,同時実行数(parallel count)が3に設定されています。J2EEサーバ2のJ2EEアプリケーションでは,Stateless Session Beanの属性として,同時実行数(parallel count)が2に設定されています。この場合,スケジュールキュー単位の同時実行数は,それぞれのJ2EEアプリケーションの同時実行数を足した5になります。
それぞれのJ2EEサーバでは,リクエスト処理要求を受けると,必要に応じてリクエスト処理用のスレッドを生成します。最大でJ2EEアプリケーションのparallel countに設定した数分のスレッドが生成されます。生成されたスレッドは,削除されないでそのまま常駐スレッドになります。
なお,parallel countは,サーバ管理コマンドで設定,変更できます。
(2) 同時実行数を動的変更したあとの状態(同時実行数を8に増やした場合)
スケジュールキュー単位の同時実行数を動的に8に増やした場合について説明します。
スケジュールキュー単位の同時実行数を動的に増やすと,変更後の同時実行数に合わせて,それぞれのJ2EEアプリケーションのリクエスト処理用の常駐スレッド数も変更されます。
なお,常駐スレッド数が変更されるときには,スケジュールキューを共有しているJ2EEアプリケーションで,常駐スレッド数の平均化が実施されます。例えば,三つのJ2EEサーバ上のJ2EEアプリケーションのparallel countがそれぞれ40,30,60で,それぞれ常駐スレッドが最大数作成されている場合に,スケジュールキュー単位の同時実行数を120に変更しようとすると,それぞれのJ2EEサーバ上の常駐スレッド数は,「120(同時実行数)÷3(スケジュール共有数)」で平均化されて,40になります。
図3-15の場合は,同時実行数8を二つのJ2EEサーバで処理するので,常駐スレッド数がそれぞれ4ずつに変更されます。
(3) 同時実行数を動的に変更したあとの状態(同時実行数を1に減らした場合)
スケジュールキュー単位の同時実行数を1に減らした場合について説明します。
同時実行数を減らす場合も,変更後の同時実行数に合わせて,それぞれのJ2EEアプリケーションのリクエスト処理用の常駐スレッド数が変更されます。この場合も,常駐スレッド数は平均化されます。
ただし,スケジュールキュー単位の同時実行数を,スケジュールキューを共有しているJ2EEアプリケーションの数よりも小さくした場合,単純に常駐スレッド数を平均化すると,リクエストを受け付けないJ2EEサーバが出てしまいます。これを防ぐため,常駐スレッドは最低で1個は確保されます。
図3-15の場合,同時実行数1を二つのJ2EEサーバで処理するので,それぞれのJ2EEサーバの常駐処理スレッドは,最低保障常駐スレッド数である1になります。ただし,この場合も,同時に処理されるリクエストの数は,同時実行数分だけになります。つまり,J2EEサーバ2での処理が完了するまで,J2EEサーバ1のスレッドでは処理が実行されません。