NQMGR(8) NQMGR(8)
名前
nqmgr - Postfix キューマネージャ
書式
nqmgr [generic Postfix daemon options]
解説
nqmgr デーモンは入ってくるメールの到着を待ち、Postfix 配送
プロセスが配送するための準備をします。実際のメールルーティ
ング方法は trivial-rewrite(8) デーモンに委託されます。この
プログラムは master(8) プロセスマネージャから起動される こ
とを想定しています。
ロ ーカルの double-bounce アドレス宛のメールは黙って捨てら
れます。これにより配送できないバウンス通知によって起こる潜
在的なループが止められます。
オ プションの relocated データベースにリストされたユーザ宛
のメールは "user has moved to new_location" メッセージが付
いてバウンスされます。正確な記述は relocated(5) を参照して
下さい。
メールキュー
nqmgr デーモンは次のキューの保守をします:
incoming
ネットワークから入ってくるメール、またはロ ー カ ル
pickup エージェントが maildrop ディレクトリから拾っ
てきたメール。
active 配送するためにキューマネージャが開いたメッセー ジ。
active キューに入れられるメッセージは限られた数だけ
です(固定された配送速度のために穴あきバケツ戦略)。
deferred
最初の試行で配送できなかったメール。キュー マ ネ ー
ジャ には配送試行の間隔を倍にして指数的に遅らせる機
構が組み込まれています。
corrupt
読めない、もしくは損傷したキューファイルは検査の た
めにここに移動されます。
配送状態レポート
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
キューマネージャは洗練されたプリエンプティブメッ セ
ー ジスケジューリングを使ってメッセージ毎の正確な遅
延を保存する一方で、受信者毎の遅延の平均を最小化 し
ようとします。
TRIGGERS
アイドル状態のシステムでは、キューマネージャはイベントのト
リガーの到着を待つか、タイマーで落ちるのを待ちます。トリガ
ー は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
"-" で始まる受信者アドレスはバウンスしない。
relocated_maps
存 在しないユーザ、ホストまたはドメインの連絡情報の
テーブル。 relocated(5) 参照。
queue_directory
Postfix キューのトップレベルディレクトリ。
アクティブなキューの制御
下の文章で、transport は master.cf エントリの最初のフィ ー
ルドです。
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 が持つことが可能なメモリ内受
信者数の制限。
Timing controls
minimal_backoff_time
遅延メッセージの配送試行間隔の最低秒数。
こ の パ ラメータは単期間・メモリ内配送先状態キャッ
シュに届かない配送先を記憶しておく時間も制 限 し ま
す。
maximal_backoff_time
遅延メッセージの配送を試行する最大間隔秒数。
maximal_queue_lifetime
配 送できないとして返送するまでキューに入っている最
大の日数。
queue_run_delay
遅延キューをスキャンする間隔の秒数。キューのス キャ
ンは重なりません。
transport_retry_time
壊れた配送方法に連絡を試みる間隔の秒数。
Concurrency controls
initial_destination_concurrency
同 じ配送先に並列で配送する際の、配送先ごとの並列度
の初期値。
default_destination_concurrency_limit
同じ配送先への並列度の制限数のデフォルト。
transport_destination_concurrency_limit
指定されたメッセージ transport での同じ配送先に対す
る並列配送数の制限。
受信者制御
default_destination_recipient_limit
メッセージ配送ごとの受信者数の制限のデフォルト。
transport_destination_recipient_limit
指定されたメッセージ transport での、メッセージ配送
ごとの受信者数の制限のデフォルト。
Message scheduling
transport_delivery_slot_cost (有効範囲: 0,2,3...)
このパラメータは基本的に、transport によるメッセ ー
ジ 配送が他のメッセージに割り込まれる頻度を制御しま
す。メッセージ/配送内部カウンタは それぞれの trans-
port によって扱われる transport_delivery_slot_cost
配送に対して、 1 だけ増加します。このカウンタは他の
メッ セージが使うための "利用可能な配送スロット" の
数を表しています。 "利用可能な配送スロット" カウ ン
タの値よりも少ない transport エージェントを使って他
のメッセージが配送されると、カレントメッセージは 他
のメッセージによる割り込みを受けます。
値が 0 に等しいと、transport に対するメッセージプリ
エンプションは使えません。
transport_minimum_delivery_slots
少なくとも transport_minimum_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), プロセスマネージャー
relocated(5), 移動したユーザのテーブルの書式
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
1