增加出站邮件的Postfix性能

我们正在尝试优化戴尔PowerEdge 1850,双3GHz处理器,3072MB内存,运行Postfix 2.8.4并使用OpenDKIM 2.4.1签名邮件。

iostat -x输出是:

avg-cpu: %user %nice %system %iowait %steal %idle 0.59 0.04 0.20 0.24 0.00 98.94 Device: rrqm/s wrqm/sr/sw/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 11.57 0.01 4.97 0.27 132.35 26.63 0.03 6.09 2.03 1.01 sda1 0.00 0.00 0.00 0.00 0.00 0.00 13.40 0.00 16.26 15.73 0.00 sda2 0.00 11.57 0.01 4.97 0.27 132.35 26.63 0.03 6.09 2.03 1.01 dm-0 0.00 0.00 0.01 16.54 0.27 132.35 8.01 0.11 6.55 0.61 1.01 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 3.42 0.44 0.00 

最高输出:

 top - 22:10:04 up 86 days, 1:46, 5 users, load average: 2.99, 2.94, 2.82 Tasks: 227 total, 8 running, 218 sleeping, 0 stopped, 1 zombie Cpu(s): 66.1%us, 1.3%sy, 0.0%ni, 32.3%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 3115136k total, 2819188k used, 295948k free, 248620k buffers Swap: 5177336k total, 0k used, 5177336k free, 1695580k cached 

我们使用SwiftMailer通过SMTP将邮件传递给Postfix。 如果我们尝试启动超过3个通过SwiftMailer发送的PHP脚本的并行实例,则平均负载将达到3+,并且交付速度将降低。 我们花了将近一整天时间发送500K邮件。 远程邮件服务器很高兴地接受我们的邮件,任何推迟的邮件都传递给一个后备中继。

在发送过程中,我们的q形显示快速排队:

  T 5 10 20 40 80 160 320 640 1280 1280+ TOTAL 10 10 0 0 0 0 0 0 0 0 0 gmail.com 2 2 0 0 0 0 0 0 0 0 0 yahoo.com 2 2 0 0 0 0 0 0 0 0 0 aol.com 1 1 0 0 0 0 0 0 0 0 0 aim.com 1 1 0 0 0 0 0 0 0 0 0 evhs.net 1 1 0 0 0 0 0 0 0 0 0 myactv.net 1 1 0 0 0 0 0 0 0 0 0 hotmail.com 1 1 0 0 0 0 0 0 0 0 0 googlemail.com 1 1 0 0 0 0 0 0 0 0 0 

而且因为我们正在使用回退中继,所以我们的主SMTP服务器上的延期队列是空的。

我们正在使用本地recursioncaching域名服务器(Unbound),并且已经遵循Postfix Tuning README中的所有调优技巧。 但是我们仍然在摸索到哪里寻找瓶颈,为什么要花一整天的时间发送500K邮件。 我已经阅读了其他Postfix优化文章(包括ServerFault上的文章),但罪魁祸首似乎总是IO。 但是我们的iostat输出看起来像磁盘一样不忙。

我们应该从哪里开始寻找?

无需签署和出站垃圾邮件扫描Postfix可以轻松处理每小时36万封邮件。

这里的问题是66.1%的CPU使用率。 由于您没有提供有关使用此负载的进程的信息,因此我会假设它们与Postfix无关。 它们是DKIM签名过程或PHP过程。

您需要调整负载负载的进程,而不是负责邮件传递的进程。

“如果我们尝试启动通过SwiftMailer发送的超过3个并行PHP脚本实例,负载平均值将达到3+,并且交付速度将降低。”

您可能要仔细查看脚本的内存和/或CPU处理要求/负载。

你使用软件RAID吗? 我不久前遇到了问题,raid(raid 5)是一个问题。 要么使用RAID 10,要么根本不使用RAID。

在后缀方面,尝试看看default_process_limit。 也许使用值50.另外,本地安装一个caching域名服务器(例如dnsmasq),可以帮助DNS。

HTH