バッチジョブはConcurrency Utilities for Java EEで提供されるスレッドを利用します。バッチジョブの処理に必要なスレッドは管理実行サービスにより管理されています。
以下のジョブ実行および、ジョブ実行内の処理では、それそれ個別のスレッドを必要とします。
バッチジョブの実行
パーティション化ステップの各パーティションの実行
スプリットの各フローの実行
以下に示すジョブXMLにおいて、スプリット内に2つのフローを作成し、それぞれのフローにおいてパーティション化ステップを2つのスレッドで実行するように定義した場合、ジョブ実行に1、スプリット内フローに2、パーティションの実行に2+2=4の最大7スレッドを必要とします。
: <split id="split1" next="stepA"> <flow id="flow1"> <step id="step1"> <batchlet ref="myBatchlet" /> <partition> <plan partitions="4" threads="2" /> : </step> </flow> <flow id="flow2"> <step id="step2"> <batchlet ref="myBatchlet2" /> <partition> <plan partitions="2" threads="2" /> : </step> </flow> </split> :
利用できるスレッドに空きがない場合は、利用可能になるまで待ち状態となります。このため、上記の場合必ずしも7スレッド利用できなければ動作しないわけではありません。また、ジョブXMLで指定した数だけスレッドが利用できるかどうかはシステムの状況に依存します。
CPUの動作効率を上げるために同時実行スレッド数を増やしたり、負荷を抑制するために同時実行スレッド数を減らしたりすることができます。ただし、実行に充分なスレッドが利用できない場合はジョブが動作しなくなる場合があるため、同時実行されるジョブ実行、スプリット数およびパーティション化ステップ数の合計よりも多くのスレッドが利用できるようにしてください。
管理実行サービスについて詳しくは「4.21.1 管理実行サービス」を参照してください。
デフォルトではバッチジョブで以下の管理実行サービスを使用します。デフォルト管理実行サービスのスレッド数の上限は64です。
concurrent/__defaultManagedExecutorService
バッチジョブで使用する管理実行サービスを変更する方法については、「10.1.21.4 set-batch-runtime-configurationサブコマンド」を参照してください。