web-dev-qa-db-ja.com

postfixはメールをキューに入れるのに60-90msかかります-正常ですか?

ローカルのPostfixサーバーに個々のメールを送信すると、(多分?)奇妙な遅延が発生します。

問題の診断を支援するために、5通の電子メールを送信する小さなテストプログラムを作成しました。

get smtp 1ms   (  1 ms)
email 0 677ms  (676 ms)
email 1 802ms  (125 ms)
email 2 890ms  ( 88 ms)
email 3 973ms  ( 83 ms)
email 4 1088ms (115 ms)

最初の電子メールのハンドシェイクを割り引くと、電子メールあたり約90ミリ秒になります。これらのタイミングは、別のコードパスを使用して他の誰かが作成した別のテストアプリでも裏付けられているため、サーバーに関連しているように見えます。

詳細ログをオンにしたところ、メッセージの終わりの間に遅延があることがわかりました\r\n\r\nと受信:

[16:31:29.95] [SEND] \r\n.\r\n
[16:31:30.05] [RECV] 250 2.0.0 Ok: queued as B128E1E063\r\n

[16:31:30.08] [SEND] \r\n.\r\n
[16:31:30.17] [RECV] 250 2.0.0 Ok: queued as 4A7DE1E06E\r\n

[16:31:30.19] [SEND] \r\n.\r\n
[16:31:30.27] [RECV] 250 2.0.0 Ok: queued as 68ACC1E072\r\n

[16:31:30.28] [SEND] \r\n.\r\n
[16:31:30.34] [RECV] 250 2.0.0 Ok: queued as 7EFFE1E079\r\n

[16:31:30.39] [SEND] \r\n.\r\n
[16:31:30.45] [RECV] 250 2.0.0 Ok: queued as 9793C1E07A\r\n

時間間隔は物語を物語っています(最初の電子メールに必要なハンドシェイクを割り引いて)-各電子メールは接尾辞がキューに入るのを約60〜90ミリ秒待っています!

これは私には過度のようです。 postfixが送信するすべての電子メールに60〜90ミリ秒かかるのは「正常」ですか?それとも私は不合理な期待を持っていますか?ローカルのPostfixサーバーが約20msでメールをキューに入れると思いますtops!

8
Jeff Atwood

それは正常に聞こえます。メールを並行して送信する際に複数の接続を実行する場合でも、メールごとに90ミリ秒かかりますか?これにより、メールを送信できるレートを簡単に上げることができます。

他のMTA(sendmail)がfsync()を実行して、受け入れられたメールが250応答を返送する前にディスクにコミットされるようにし、メールの受け入れ後にシステムがクラッシュした場合に電子メールがドロップされないようにします。接尾辞もおそらく同様です。

これをテストするには、メールスプールディレクトリを一時的にtmpfsに配置し、メールの受け入れにかかる時間を確認します。

その90msウィンドウの間にそれがcould実行している他のことは、ウイルススキャン、ブラックリストチェックなどです。しかし、それらが構成されているかどうかはおそらくご存知でしょう。

12
MikeyB

Postfixのベストプラクティスでは、次のことを避けるために、最初のキューの前にほとんどのフィルタリングを実行する必要があるとされています。

  1. そもそも受け入れるべきではないメッセージのリソースを浪費する。
  2. エラーメッセージを送り返すことは避けてください(したがって、元の電子メールとエラーメッセージにリソースを費やします)。
  3. 間違った受信者にエラーメッセージを送信しないようにします。

そのため、キューイング時間はリソースを節約するために最適化されていません。 postfixのsmtpd_recipient_restrictionsmain.cf のすべてのチェックを無効にすると、エラーが増え、ユーザーへの(間違った)エラーメッセージが増える代わりに、キューイングが速くなる可能性があります。たとえば、アプリケーションの出力サーバーのみの場合、これは完全に受け入れられます。

6
jneves