NQMGR(8) NQMGR(8)
名前
nqmgr - Postfix キューマネージャ
書式
nqmgr [generic Postfix daemon options]
解説
nqmgr デーモンは入ってくるメールの到着を待ち、Postfix 配送
プロセスが配送するための準備をします。実際のメールルーティ
ング方法は trivial-rewrite(8) デーモンに委託されます。この
プログラムは master(8) プロセスマネージャから起動される こ
とを想定しています。
ロ ーカルの double-bounce アドレス宛のメールは静かに捨てら
れます。これにより配送できないバウンス通知によって起こる潜
在的なループが止められます。
メールキュー
nqmgr デーモンは次のキューの保守をします:
incoming
ネッ ト ワ ークから入ってくるメール、またはローカル
pickup エージェントが maildrop ディレクトリから拾っ
てきたメール。
active 配送するためにキューマネージャが開いたメッセージ。
active キューに入れられるメッセージは限られた数だけ
です(固定された配送速度のための穴あきバケツ戦略)。
deferred
最 初 の 試行で配送できなかったメール。キューマネー
ジャには配送試行の間隔を倍にして指数的に遅らせる 機
構が組み込まれています。
corrupt
読 めない、もしくは損傷したキューファイルは検査のた
めにここに移動されます。
hold "hold" に保存されたメッセージは誰かが開放するまでそ
こに留められます。
配送状態レポート
nqmgr デーモンは次のディレクトリのメッセージごとの配送状態
レポートに注目しつづけます。それぞれの状態レポートファイル
は対応するメッセージファイルと同じ名前です:
bounce なぜメールがバウンスされたかという受信者ごとの状態
の情報。これらのファイルは bounce(8) デーモンにより
保守されます。
defer なぜメールが遅延されたかという受信者ごとの状態の情
報。これらのファイルは defer(8) デーモンにより保 守
されます。
nqmgr デーモンは bounce(8) や defer(8) デーモンに不達レポ
ートを送るように依頼する責任を負います。
方法
キューマネージャにはキューファイルを開いたり(入力)メッセー
ジ配送 (出力)するための様々な方法が組み込まれています。
leaky bucket
こ の 方 法は active キュー内のメッセージの数を制限
し、負荷が重い時にキューマネージャがメモリを使い 果
たすのを防ぎます。
fairness
active キューの場所が空いている時、キューマネージャ
は incoming キューと deferred キューから1メッセージ
ず つ持ってきます。これは未処理のメールが新しいメー
ルの配送を妨げることを防ぎます。
slow start
この方法は同じ目的地への並列配送数をゆっくり調整 す
る こ とで、「大群(thundering herd)」問題をなくしま
す。
round robin
キューマネージャは配送先で要求をソートします。ラ ウ
ン ドロビン選択により、一つの送信先への配送が他の送
信先を支配することがないようにします。
exponential backoff
最初の試行で配送できなかったメールは遅延されま す。
配 送試行の時間間隔はそれぞれの試行ごとに倍になりま
す。
destination status cache
キューマネージャは配送できない送信先を短期間のメ モ
リ 内リストに保持することで、不必要な配送試行を避け
ます。
preemptive message scheduling
キューマネージャは洗練されたプリエンプティブメッ セ
ー ジスケジューリングを使ってメッセージ毎の正確な遅
延を保存する一方で、受信者毎の遅延の平均を最小化 し
ようとします。
トリガー
アイドル状態のシステムでは、キューマネージャはイベントのト
リガーの到着を待つか、タイマーで落ちるのを待ちます。トリガ
ー は1バイトのメッセージです。メッセージの到着に依存して、
キューマネージャは次のうち一つの行動を起こします(メッセ ー
ジの後にソフトウェアの内部で使われるシンボル的な定数が続き
ます):
D (QMGR_REQ_SCAN_DEFERRED)
遅延キューのスキャンをはじめます。すでに遅延キュ ー
の スキャンが行なわれている最中であれば、それが終わ
り次第再びはじめます。
I (QMGR_REQ_SCAN_INCOMING)
入ってくるキューのスキャンをはじめます。す で に ス
キャ ンが行なわれている最中であれば、それが終わり次
第再びはじめます。
A (QMGR_REQ_SCAN_ALL)
遅延キューファイルのタイムスタンプを無視します。 要
求は次の遅延キュースキャン時に有効です。
F (QMGR_REQ_FLUSH_DEAD)
動 い て いない配送方法や配送先に関する情報を消しま
す。
W (TRIGGER_REQ_WAKEUP)
目覚し。これはマスターサーバがサーバ群にいなくな ら
な いように説得するために使います。この動作は入って
くるキューのスキャンをはじめます。
nqmgr デーモンはトリガーのバッファ全体を読みます。複数の別
々 のトリガー要求は一つにまとめられ、A と F が D と I より
先になるようにソートされます。従って、遅延キューを動かすに
は A F D を要求し、キューマネージャに新しいメールの到着を
知らせるには I を指定します。
標準
なし。nqmgr デーモンは外界と接触しません。
セキュリティ
nqmgr デーモンはセキュリティに注意を払う必要がありません。
1 文 字 メッセージを信頼しないローカルユーザから読みこむた
め、サービス拒否攻撃(Denial of Service attacks) には 弱 く
なっ て い ます。 nqmgr デーモンは外の世界とは話をしません
し、chroot された環境では低い特権に固定されて動きます。
診断
問題や処理は syslog デーモンに記録されます。不正なメッセー
ジ ファイルは詳細な調査のために corrupt キューにセーブされ
ます。
notify_classes パラメータの設定によっては、ポストマスタ ー
にバウンスやその他のトラブルが通知されます。
バグ
単 独のキューマネージャプロセスは smtpd のような複数のフロ
ントエンドプロセスとディスクアクセスの競合をします。突然た
くさんのメールが入ってくると、外への配送速度にネガティブな
影響を及ぼすことがあります。
設定パラメータ
以下の main.cf パラメータは特にこのプログラムに関連があ り
ま す。文法の詳細やデフォルト値は Postfix main.cf ファイル
を参照してください。設定の変更後は postfix reload コマンド
を使ってください。
その他
allow_min_user
"-" で始まる受信者アドレスはバウンスしない。
queue_directory
Postfix キューのトップレベルディレクトリ。
アクティブなキューの制御
下 の文章で、transport は master.cf エントリの最初のフィー
ルドです。
qmgr_clog_warn_time
特定の配送先が active キューを妨げているという警 告
の最小遅延間隔。 0 を指定すると無効にします。
qmgr_message_active_limit
アクティブなキューの数を制限する。
qmgr_message_recipient_limit
メモリに保持する受信者の数を制限する。
こ のパラメータは単期間・メモリ内配送先キャッシュの
サイズも制限します。
qmgr_message_recipient_minimum
メッセージ毎のメモリ内受信者の最小値。
default_recipient_limit
transport ごとのメモリ内受信者数の制限のデフォル ト
値。
transport_recipient_limit
指定されたメッセージ transport に対する、メモリ内受
信者数の制限。
default_extra_recipient_limit
プリエンプティブメッセージが持てる transport ごとの
メモリ内受信者数の合計の制限のデフォルト値。
transport_extra_recipient_limit
transport 配送により配送される全てのプリエンプティ
ブメッセージ transport が持つことが可能なメモリ内受
信者数の制限。
タイミング制御
minimal_backoff_time
遅延メッセージの配送試行間隔の最低秒数。
こ の パ ラメータは単期間・メモリ内配送先状態キャッ
シュに届かない配送先を記憶しておく時間も制 限 し ま
す。
maximal_backoff_time
遅延メッセージの配送を試行する最大間隔秒数。
maximal_queue_lifetime
配 送できないとして返送するまでキューに入っている最
大の日数。
queue_run_delay
遅延キューをスキャンする間隔の秒数。キューのス キャ
ンは重なりません。
transport_retry_time
壊れた配送方法に連絡を試みる間隔の秒数。
並列度制御
initial_destination_concurrency
同 じ配送先に並列で配送する際の、配送先ごとの並列度
の初期値。
default_destination_concurrency_limit
同じ配送先への並列度の制限数のデフォルト。
transport_destination_concurrency_limit
指定されたメッセージ transport での同じ配送先に対す
る並列配送数の制限。
受信者制御
default_destination_recipient_limit
メッセージ配送ごとの受信者数の制限のデフォルト。
transport_destination_recipient_limit
指定されたメッセージ transport での、メッセージ配送
ごとの受信者数の制限のデフォルト。
メッセージのスケジューリング
transport_delivery_slot_cost (有効範囲: 0,2,3...)
このパラメータは基本的に、transport によるメッセ ー
ジ 配送が他のメッセージに割り込まれる頻度を制御しま
す。メッセージ/配送内部カウンタは それぞれの trans-
port によって扱われる transport_delivery_slot_cost
配送に対して、 1 だけ増加します。このカウンタは他の
メッ セージが使うための "利用可能な配送スロット" の
数を表しています。 "利用可能な配送スロット" カウ ン
タの値よりも少ない transport エージェントを使って他
のメッセージが配送されると、カレントメッセージは 他
のメッセージによる割り込みを受けます。
値が 0 に等しいと、transport に対するメッセージの割
り込みを無効にします。
transport_minimum_delivery_slots
利用可能な配送スロットを少なくとも transport_mini-
mum_delivery_slots 個 蓄 積 で きないメッセージが
transport によって配送される時には、メッセージの 割
り込みは全く試行されません。
transport_delivery_slot_discount (有効範囲: 0..100)
transport_delivery_slot_loan
メッ セージの割り込みが起こるとこれらのパラメータは
すぐにスピードを上げます。要求された配送スロット の
全 て が 使えるようになるのを待つ代わりに、必要量の
transport_delivery_slot_discount パーセントに加えて
transport_delivery_slot_loan が蓄積されて残っていれ
ば、割り込みが起こります。他の割り込みが後で起こ る
前 に総量がたまらなければいけないことに注意してくだ
さい。
default_delivery_slot_cost
default_minimum_delivery_slots
default_delivery_slot_discount
default_delivery_slot_loan
transport に固有のパラメータのデフォルト値は上に 書
かれています。
関連項目
master(8), プロセスマネージャー
syslogd(8) システムロギング
trivial-rewrite(8), アドレスルーティング
ライセンス
The Secure Mailer license はこのソフトウェアと一緒に配布さ
れなければいけません。
作者
Wietse Venema
IBM T.J. Watson Research
P.O. Box 704
Yorktown Heights, NY 10598, USA
Scheduler enhancements:
Patrik Rak
Modra 6
155 00, Prague, Czech Republic
NQMGR(8)