TERASOLUNA Batch Framework for Javaでは、システム構成に合わせて非同期ジョブを実行するスレッド数をチューニングします。そのチューニング結果として生成されるスレッド数が、ワークマネージャのスレッドプールサイズを超える場合、TERASOLUNAフレームワークがフリーズし、ジョブが終了しなくなる場合があります。
■生成するスレッド数の計算
同一の非同期バッチデーモンで複数のジョブを実行する場合、同一のワークマネージャ内でスレッドを生成します。
そのイメージを、下図に示します。
ワークマネージャのスレッドプール内で生成するスレッドは、次の計算式で算出できます。
生成スレッド数=同時に実行するジョブの個数×非同期ジョブのmultiplicity×2 (なお、通常ジョブの場合、multiplicityは1とみなして計算します) |
■Java VMがハングアップしたときのワークマネージャの状況
multiplicityが3の非同期ジョブを4個同時に実行した場合、生成するスレッド数は、前述の計算式により24個です。そのとき、ワークマネージャのスレッドプールサイズが12の場合、下図に示す状態になる場合があります。
上図は、スレッドプールサイズが12しかないのに、対象データを取得するスレッド12個がすでにプーリングされていて、これ以上新しいスレッドを生成できない状態です。そのためBLogicを実行するスレッドを起動することができず、BLogicを実行することができません。その結果、対象データを取得するスレッドが永遠にBLogicの実行が終わるのを待ち続けることになり、ジョブがいつまでも終了しなくなります。
そうならないようにするための対処方法には、次があります。
1) 非同期バッチデーモンで同時に実行するジョブ数を調整する
2) 非同期バッチデーモンを使用しないジョブを実行する
3) 分割ジョブでなく通常ジョブを実行する
4) 分割ジョブのmultiplicityを減らす
5) ワークマネージャのスレッドプールサイズを調整する
1)、2)については、非同期バッチデーモンが同時に実行するジョブを減らすようにプログラムを見直してください。
3)~4)については、当該ジョブのジョブBean定義ファイルの設定を見直してください。
5)については、次で説明します。
■ワークマネージャのスレッドプールサイズの調整
ワークマネージャのスレッドプールサイズを調整する場合は、下記ファイルを修正し、スレッドプールサイズを変更します。
OS | ファイルの所在 | 修正箇所 |
---|---|---|
Windows | [Interstageのインストールディレクトリ] \BAS\terasoluna\var\commonj\.bindings | java\:comp/env/wm/default/RefAddr/0/Content=<スレッドプールサイズ> |
Solaris/Linux | /opt/FJSVibs/var/terasoluna/commonj/java:comp/env/wm/.bindings | default/RefAddr/0/Content=<スレッドプールサイズ> |
スレッドプールサイズ:
ワークマネージャで使用されるスレッドプールサイズです。
1~100の値で指定することができます。初期値は10です。