Postfix benötigt 60-90 ms, um E-Mails in die Warteschlange zu stellen - normal?

8

Wir sehen einige (vielleicht?) Seltsame Verzögerungen beim Senden einzelner E-Mails an unseren lokalen Postfix-Server.

Um das Problem zu diagnostizieren, habe ich ein kleines Testprogramm geschrieben, das 5 E-Mails sendet:

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)

Abzüglich des Handshakes in der ersten E-Mail sind das ungefähr 90 ms pro E-Mail. Diese Timings wurden auch mit einer anderen Test-App bestätigt, die von einer anderen Person unter Verwendung eines anderen Codepfads geschrieben wurde, sodass sie anscheinend serverbezogen ist.

Ich habe die detaillierte Protokollierung aktiviert und kann sehen, dass die Verzögerung zwischen dem Ende der Nachricht \r\n\r\nund dem Empfang liegt:

[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

Die Zeitintervalle erzählen die Geschichte (ohne Berücksichtigung des für die erste E-Mail erforderlichen Handshakes) - jede E-Mail wartet etwa 60 bis 90 Millisekunden, bis das Postfix in die Warteschlange gestellt wird!

Das scheint mir ... übertrieben ... zu sein. Ist es "normal", dass Postfix für jede E-Mail, die Sie senden, 60-90 ms dauert? Oder habe ich nur unvernünftige Erwartungen? Ich würde den lokalen Postfix - Server erwartet , dass die E - Mail in etwa 20 ms anstehen, Tops!

Jeff Atwood
quelle
3
Haben Sie die Filterung aktiviert, z. B. SPF überprüfen, Reverse DNS nachschlagen oder Ident? Verwenden Sie SMTP oder MSP?
Chris S

Antworten:

12

Das klingt normal. Wenn Sie mehrere Verbindungen parallel zum Senden von E-Mails ausführen, erhalten Sie immer noch 90 ms pro E-Mail? Auf diese Weise können Sie ganz einfach Ihre Rate erhöhen, mit der Sie E-Mails senden können.

Ich weiß, dass andere MTAs (sendmail) fsync () ausführen, um sicherzustellen, dass die akzeptierte E-Mail vor dem Zurücksenden der 250-Antwort auf die Festplatte übertragen wird, damit E-Mails nicht gelöscht werden, wenn das System nach dem Akzeptieren der E-Mail abstürzt. Postfix wahrscheinlich auch.

Sie können dies testen, indem Sie das Mail-Spool-Verzeichnis vorübergehend in tmpfs ablegen und sehen, wie lange es dauert, Mail zu akzeptieren.

Andere Dinge , die es konnte während dieser 90ms Fenster tun sind: Virenprüfung, schwarze Liste Prüfung, etc. Aber würden Sie vermutlich wissen , ob sie konfiguriert wurden.

MikeyB
quelle
6

Nach den Best Practices von Postfix sollten Sie den größten Teil der Filterung vor der ersten Warteschlange durchführen, um Folgendes zu vermeiden:

  1. Verschwendung von Ressourcen in Nachrichten, die Sie überhaupt nicht akzeptieren sollten;
  2. Vermeiden Sie das Zurücksenden von Fehlermeldungen (geben Sie daher die Ressourcen für die ursprüngliche E-Mail und die Fehlermeldung aus).
  3. Vermeiden Sie das Senden von Fehlermeldungen an falsche Empfänger.

Die Wartezeit ist also nicht optimiert, um Ressourcen zu sparen. Wenn Sie alle Eincheckvorgänge in smtpd_recipient_restrictionsPostfixes deaktivieren main.cf, kann es wahrscheinlich zu schnelleren Warteschlangen kommen, was zu mehr Fehlern und mehr (falschen) Fehlermeldungen an Benutzer führt. Das wäre durchaus akzeptabel, wenn es zum Beispiel nur der Ausgangsserver für eine Anwendung wäre.

jneves
quelle