スレッド数の計算式を次に示します。(a)と(b)の合計が,J2EEサーバが使用するスレッド数です。
(a) 基本のスレッド数
次の計算式で算出してください。
- CORBAネーミングサービスをインプロセスで起動し,インプロセスHTTPサーバを使用する場合
最大スレッド数 = (65+A+B+3×C+D+5×E+2×F+G+H+I+K) / 0.8
- CORBAネーミングサービスをインプロセスで起動し,Hitachi Web Serverを使用する場合
最大スレッド数 = (63+A+B+3×C+D+5×E+2×F+G+H+J+K) / 0.8
- (凡例)
- A:デプロイ済みのEntity Bean,Stateless Session Bean,Stateful Session Beanの数の合計
- B:Message-driven Beanを使用する場合,Message-driven Beanの最大インスタンス数
- C:EJBサーバ側の最大同時実行数(接続する最大EJBクライアント数)
- D:CORBAネーミングサービスのスレッド数(ただし,CORBAネーミングサービスをインプロセスで起動(usrconf.propertiesのejbserver.naming.startupModeキーにinprocessを指定)した場合だけ加算する)
- E:データベースコネクションの数
- F:リソースアダプタ数
- G:簡易Webサーバへの同時接続クライアント数(ただし,簡易Webサーバへの同時接続クライアント数が5以下の場合は5,100以上の場合は100を指定する)
- H:デプロイ済みのWebアプリケーションの数
- I:インプロセスHTTPサーバのスレッド数(インプロセスHTTPサーバ機能を利用する場合だけ加算する。このスレッド数は,usrconf.propertiesで制御できる)
- J:Webサーバの同時接続クライアント数(ただし,Webサーバの同時接続クライアント数がWebコンテナの最大同時実行スレッド数(usrconf.propertiesのwebserver.connector.ajp13.max_threadsキーに指定した値)以下の場合は,Webコンテナの最大同時実行スレッド数を指定する)
- K:次の式で算出したTP1インバウンドアダプタのスレッド数(TP1インバウンド連携機能を使用する場合だけ加算する。このスレッド数はConnector属性ファイルで制御できる)
4+TP1インバウンドアダプタのプロパティrpc_max_thread_countに指定したスレッド数
+TP1インバウンドアダプタのプロパティtrn_max_thread_countに指定したスレッド数
+TP1インバウンドアダプタと連携するデプロイ済みのMessage-driven Bean(サービス)の数の合計
+TP1インバウンドアダプタのプロパティMaxTPoolSizeに指定した数
(b) JavaVMのオプション指定に応じて使用するスレッド数
JavaVMのオプション指定に応じて,次の計算式で算出してください。Aは,-XX:+UseParNewGCオプションを指定している場合だけ加算します。Bは,-XX:+HitachiUseExplicitMemoryオプションを指定した場合だけ加算します。
最大スレッド数 = A + B
- (凡例)
- A:パラレルコピーガーベージコレクションで使用するスレッド数(-XX:ParallelGCThreadsオプションに指定した値。このオプションの指定を省略した場合は,論理CPU数を基にした-XX:ParallelGCThreadsオプションのデフォルト値。なお,J2EEサーバ起動時の論理CPU数によって決定されるため,起動後に論理CPUの数を変更してもスレッド数は変化しない)
- B:明示管理ヒープ機能で使用するスレッド数(論理CPU数。ただし,論理プロセッサ数が8以上の場合は8。なお,J2EEサーバ起動時の論理CPU数によって決定されるため,起動後に論理CPUの数を変更してもスレッド数は変化しない)
JavaVMのオプションについては,マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の次の個所を参照してください。
- 19.5 Cosminexusで指定できるJava HotSpot VMのオプション
- -XX:[+|-]HitachiUseExplicitMemory(明示管理ヒープ機能オプション)
CORBAネーミングサービスをJ2EEサーバ起動時にインプロセスで起動させる場合に,J2EEサーバ上で生成されるCORBAネーミングサービスのスレッド数の見積もりについて説明します。
インプロセスで起動する場合のCORBAネーミングサービスのスレッド数は,次のように見積もります。
合計スレッド数 = 初期化時に生成されるスレッド数+ワーカスレッド数
(a) 初期化時に生成されるスレッド数
初期化時に生成されるスレッド数は,usrconf.propertiesのvbroker.agent.enableLocatorキーの値がtrueの場合は6,falseの場合は4です。なお,vbroker.agent.enableLocatorキーは,CTM連携機能を有効(ejbserver.ctm.enabledキーにtrueを指定)にした場合,自動的にtrueが設定されます。
(b) ワーカスレッド数
ワーカスレッド数は,「同時受け付けリクエスト数+1」と「クライアントとCORBAネーミングサービス間のコネクション数」の合計になります。
ワーカスレッド数に関連するキーを次に示します。
- vbroker.se.iiop_tp.scm.iiop_tp.dispatcher.threadMax
- vbroker.se.iiop_tp.scm.iiop_tp.dispatcher.threadMin
- vbroker.se.iiop_tp.scm.iiop_tp.dispatcher.threadMaxIdle
これらのキーは,usrconf.propertiesのejbserver.naming.exec.argsキーの値として指定します。これらのキーの詳細については,マニュアル「Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド」,およびマニュアル「Borland(R) Enterprise Server VisiBroker(R) プログラマーズリファレンス」を参照してください。
vbroker.se.iiop_tp.scm.iiop_tp.dispatcher.threadMaxキーで最大値を指定している場合のワーカスレッド数は,「このキーで指定した最大値」と「クライアントとCORBAネーミングサービス間のコネクション数」の合計になります。
ただし,vbroker.se.iiop_tp.scm.iiop_tp.dispatcher.threadMinキーでワーカスレッド数の最小値を指定している場合,ワーカスレッド合計数が最小値に満たないときは,最小値がワーカスレッド数となります。
最大値を指定していない場合は,多重度の増加に伴いワーカスレッド数も増加していきます。ただし,ワーカスレッドは,アイドルになってからvbroker.se.iiop_tp.scm.iiop_tp.dispatcher.threadMaxIdleキー(デフォルト値は300秒)で指定した時間が経過したあとに消滅(30秒の誤差があります)しますので,負荷が下がるとスレッド数も減少します。
ワーカスレッド数の最大値を指定している場合に,スレッド数とワーカスレッドの最大値が同じになったときは,これ以降のリクエスト受け付けはエラー扱いにはしないで,次のように処理を継続します。
- 受信済みのリクエストについては処理を継続します。
- 新規のリクエストはソケットからread()されないで,TCPの受信バッファ,クライアント側の送信バッファで滞留します。TCPのバッファがいっぱいの場合は,クライアント側で送信待ちとなります。
処理中だったワーカスレッドが空きになった(応答を返した)時点で,次のリクエストの受信処理が行われます。