将个别电子邮件提交给我们的本地Postfix服务器时,我们看到一些(也许?)奇怪的延迟。
为了帮助诊断问题,我写了一个testing程序,发送了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)
在第一封电子邮件中减less了握手次数,这是每个电子邮件大约90ms。 这些时间也得到另外一个testing应用程序的证实,这个testing应用程序是由别人使用不同的代码path编写的,因此它似乎与服务器有关。
我打开详细的日志logging,我可以看到,延迟是在消息\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排队!
这似乎..过度..对我来说。 Postfix每发送一封邮件需要60-90毫秒是“正常的”吗? 还是我有不合理的期望? 我期望本地postfix服务器排队电子邮件约20毫秒, 顶部!
这听起来很正常。 如果你同时运行多个连接提交邮件,你仍然每邮件90毫秒? 这将让您轻松提高您的速度,您可以提交邮件。
我知道其他MTA(sendmail)会在发回250响应之前确保接受的邮件被提交到磁盘fsync(),以便在接受邮件后系统崩溃的情况下邮件不会被丢弃。 后缀可能也是如此。
您可以通过将邮件假脱机目录暂时放入tmpfs并查看接收邮件需要多长时间来testing。
在这个90毫秒的时间内,可以做的其他事情是:病毒扫描,黑名单检查等。但是你可能知道它们是否被configuration。
Postfix最佳实践表示,您应该在初始队列之前执行大部分过滤,以避免:
所以,排队时间并没有优化来节省资源。 如果您在postfix的main.cf禁用smtpd_recipient_restrictions中的所有检查,则可能会以更多错误为代价获得更快的排队,并向用户获取更多(错误)的错误消息。 例如,如果只是应用程序的出口服务器,那么这将是完全可以接受的。