メッセージがチャネルキューに入れられるたびに、ジョブコントローラはメッセージを配信するためのジョブが実行されていることを確認します。これには、新規ジョブプロセスの開始、スレッドの追加、実行中のジョブの確認などの操作が含まれます。しかし、1 つのサービスジョブではすべてのメッセージを手際よく配信できない場合もあります。ジョブコントローラの概念と設定については、「10.4.8 ジョブコントローラファイル」、「12.5.4 チャネル実行ジョブの処理プール」、および 「8.7 ジョブコントローラ」を参照してください。
メッセージ配信のために開始されるプロセスやスレッドの数には、妥当な制限があります。このプロセスやスレッド数の上限は、プロセッサの数、ディスクの速度、接続の性質などによって決定されます。MTA 設定ファイルでは、次のものを制御することができます。
1 つのチャネルに対して開始できるプロセス数の上限 (maxjobs チャネルキーワード)
1 つのチャネルセットに対して開始できるプロセス数の上限 (ジョブコントローラ設定ファイルの該当するプールセクションに設定されている JOB_LIMIT パラメータ)
新しいスレッドまたはプロセスを開始する前に受信したキュー内のメッセージ数 (threaddepth チャネルキーワード)
チャネルによっては、特定の配信プログラム内で実行するスレッド数の上限 (チャネルオプションファイル内の max_client_threads パラメータ)
1 つのチャネルに対して開始されるプロセス数の上限は、そのチャネルに対して設定されている maxjobs、またはチャネルが動作しているプールに対して設定されている JOB_LIMIT の最小値に当たります。
あるメッセージに処理が必要だとします。一般に、ジョブコントローラは次の場合に新しい処理を開始します。
チャネルに対してプロセスが実行されておらず、プールのジョブ数が制限に達していない場合は、新しいプロセスを開始します。
チャネルプログラムがシングルスレッドの場合、またはスレッド数が制限に達していて threaddepth で指定されている以上のバックログがあり、かつチャネルとプールのジョブ数がともに制限に達していない場合は、新しいプロセスを開始します。
チャネルプログラムがマルチスレッドで、スレッド数が制限に達しておらず、かつ threaddepth で指定されている以上のバックログがある場合は、新しいスレッドを開始します。
特に、SMTP チャネルに対しては、異なるホスト宛のメッセージがキューに入るにつれて新しいスレッドやプロセスを開始します。ジョブコントローラは、SMTP チャネルに対し、次に示す基準に基づいて新しいプロセスを開始します。あるメッセージに処理が必要だとします。
SMTP チャネルに対してプロセスが実行されておらず、プールが制限に達していない場合、ジョブコントローラは新しいプロセスを開始します。
スレッド数が制限 (MAX_CLIENT_THREADS) に達していて、サービス待ち状態のホスト宛のメッセージがキューに入っており、チャネル数 (maxjobs) もプールジョブ (JOB_LIMIT) も制限に達していなければ、新しいプロセスが開始されます。
スレッド数が制限に達しておらず、サービス待ち状態のホスト宛のメッセージがキューに入った場合は、新しいスレッドが開始されます。
スレッド数が制限に達しておらず、メッセージがキューに入ったためにそのホスト宛のメッセージのバックログが threaddepth で指定されている以上の数になった場合は、新しいスレッドが開始されます。
「12.5.8 SMTP チャネルスレッド」も参照してください。
filesperjob キーワードを使うと、MTA に追加のサービスジョブを作成するよう指示することもできます。このキーワードには、正の整数を 1 つパラメータとして設定する必要があります。この整数は、チャネルへ送られるべきキューエントリ (ファイル) の数を指定するもので、その後それらのファイルを処理するために複数のサービスジョブが作成されます。パラメータに 0 またはそれ以下の値を指定した場合は、1 つのサービスジョブだけがキューに入れられます。キーワードを指定しないと、パラメータの値は 0 に指定されます。このキーワードの影響は最大化されます。すなわち、算出された大きな方の数値が実際に作成されるサービスジョブの数となります。
filesperjob キーワードは、実際のキューエントリ (ファイル) 数を与えられた値で割って、作成するジョブ数を算出します。各メッセージのキューエントリ数は、single や single_sys キーワード、メーリングリストのヘッダー修正アクション、そのほかさまざまな要素によって決定されます。
maxjobs キーワードは、同時実行可能な合計サービスジョブ数を制限します。このキーワードの後ろには、整数値を指定する必要があります。算出されたサービスジョブ数がこの値より大きい場合には、maxjobs ジョブだけが作成されます。maxjobs が使用されていない場合のデフォルト値は 100 に設定されています。通常、maxjobs には、そのチャネルが使用する 1 つまたは複数のサービスプールで同時実行が可能な合計ジョブ数と同じ値、またはそれ以下の値を使用します。