5.2.1 J2EEサーバが使用するリソースの見積もり

ここでは,J2EEサーバプロセスのスレッド数とファイルディスクリプタ数の見積もりについて説明します。

参考
SFOサーバのスレッド数とファイルディスクリプタ数は,J2EEサーバと同じです。J2EEサーバの計算式を使用して算出してください。
<この項の構成>
(1) スレッド数
(2) ファイルディスクリプタ数
(3) CORBAネーミングサービス(インプロセス起動時)のスレッド数の見積もり

(1) スレッド数

スレッド数の計算式を次に示します。(a)と(b)の合計が,J2EEサーバが使用するスレッド数です。

(a) 基本のスレッド数

次の計算式で算出してください。

(凡例)

CORBAネーミングサービスをインプロセスで起動し,HTTP Serverを使用する場合の見積もり例を次の図に示します。

図5-1  HTTP Serverを使用する場合のスレッド数の見積もり例

[図データ]

図に示したHTTP Serverを使用する場合のスレッド数の見積もり例を次に示します。

CORBAネーミングサービスをインプロセスで起動しHTTP Serverを使用する場合の計算式

最大スレッド数 = 68+A+B+C+D+E+F+G+H+I+J+K+L+M+O+P+Q+R+S

上記の計算式より算出した結果と設定内容について,次に示します。

最大スレッド数=68+0+0+1+5+72+72+144+2+0+72+5+2+0+0+0+0+0+0=443

表5-22 HTTP Serverを使用する場合のスレッド数の見積もり内容(例)

設定項目設定する値説明
A0Entity Beanを使用していないため,0を設定します。
B0Message-Driven Beanを使用していないため,0を設定します。
C1リモート呼び出しは行われていません。また,EJBがWebアプリケーションからのローカル呼び出しの場合,EJB実行でのスレッドは生成されません。
D4+1Cと同様にEJBクライアントに関する値は0になります。
E48+24
F721リクエストが1トランザクションとした場合,最大同時リクエスト数であるwebserver.connector.ajp13.max_threadsの値を設定します。
G(48+24)×2
H2
I0グローバルトランザクションは使用していないため,0を設定します。
J72Webサーバ(Linux)の場合,MaxClientの値を設定します。
K5簡易Webサーバは使用していないため,最小値を設定します。
L2
M0展開ディレクトリ形式ではないため,0を設定します。
O0TP1インバウンドアダプタを使用していないため,0を設定します。
P0非同期Session Beanを使用していないため,0を設定します。
Q0非同期Session Beanを使用していないため,0を設定します。
R0専用スレッドによる応答電文受信を設定していないため,0を設定します。
S0コネクションのクローズの抑止を設定していないため,0を設定します。
(b) JavaVMのオプション指定に応じて使用するスレッド数

JavaVMのオプション指定に応じて,次の計算式で算出してください。Aは,-XX:+UseG1GCオプションを指定している場合だけ加算します。Bは,-XX:+HitachiUseExplicitMemoryオプションを指定した場合だけ加算します。

最大スレッド数 = A+B

(凡例)
  • A:G1GCで使用するスレッド数(-XX:ParallelGCThreadsオプションに指定した値。このオプションの指定を省略した場合は,論理CPU数を基にした-XX:ParallelGCThreadsオプションのデフォルト値。なお,J2EEサーバ起動時の論理CPU数によって決定されるため,起動後に論理CPUの数を変更してもスレッド数は変化しない)
  • B:明示管理ヒープ機能で使用するスレッド数(論理CPU数。ただし,論理プロセッサ数が8以上の場合は8。なお,J2EEサーバ起動時の論理CPU数によって決定されるため,起動後に論理CPUの数を変更してもスレッド数は変化しない)

JavaVMのオプションについては,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の次の個所を参照してください。

(2) ファイルディスクリプタ数

ファイルディスクリプタ数の計算式を次に示します。

最大ファイルディスクリプタ数 = (139+A+B×3+C+D+E×2+F+G+H+I+J×2+K+L) / 0.8

(凡例)

(3) CORBAネーミングサービス(インプロセス起動時)のスレッド数の見積もり

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ネーミングサービス間のコネクション数×2」の合計になります。

ワーカスレッド数に関連するキーを次に示します。

これらのキーは,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秒の誤差があります)しますので,負荷が下がるとスレッド数も減少します。

ワーカスレッド数の最大値を指定している場合に,スレッド数とワーカスレッドの最大値が同じになったときは,これ以降のリクエスト受け付けはエラー扱いにはしないで,次のように処理を継続します。

処理中だったワーカスレッドが空きになった(応答を返した)時点で,次のリクエストの受信処理が行われます。