在向我们的本地 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)
Run Code Online (Sandbox Code Playgroud)
算上第一封电子邮件中的握手,每封电子邮件大约需要 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
Run Code Online (Sandbox Code Playgroud)
时间间隔讲述了这个故事(扣除初始电子邮件所需的握手)——每封电子邮件等待大约 60-90 毫秒后缀排队!
这对我来说似乎……太过分了…… postfix 为您发送的每封电子邮件花费 60-90 毫秒是否“正常”?还是我只是有不合理的期望?我希望本地 postfix 服务器在大约 20 毫秒内将电子邮件排队,最多!
Mik*_*eyB 12
这听起来很正常。如果在并行提交邮件中运行多个连接,您是否仍然获得每封邮件 90 毫秒的时间?这将使您轻松提高可以提交邮件的比率。
我知道其他 MTA(sendmail)将 fsync() 以确保在发回 250 响应之前将接受的邮件提交到磁盘,这样如果系统在接受邮件后崩溃,电子邮件就不会被丢弃。postfix 可能也是如此。
您可以通过将邮件假脱机目录临时放在 tmpfs 上并查看接受邮件需要多长时间来测试这一点。
在这 90 毫秒的窗口期间它可以做的其他事情是:病毒扫描、黑名单检查等。但是您可能知道它们是否已配置。
Postfix 最佳实践说您应该在初始队列之前进行大部分过滤以避免:
因此,排队时间并未优化以节省资源。如果您禁用smtpd_recipient_restrictions
postfix 中的所有检查,main.cf
您可能会以更多错误和向用户收到更多(错误)错误消息为代价获得更快的排队速度。例如,如果它只是应用程序的出口服务器,那将是完全可以接受的。