后缀的性能

在ubuntu上运行postfix,每天发送大量的邮件(大约100万条消息)。 负载是极高的,但在CPU和内存负载方面并不多。 任何人在类似的情况下,知道如何消除瓶颈?

此服务器上的所有邮件都是出站的。

我将不得不假设瓶颈是磁盘。

只是一个更新,这里是iostat的样子:

avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.12 99.88 0.00 0.00 Device: rrqm/s wrqm/sr/sw/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 12.38 0.00 2.48 0.00 118.81 48.00 0.00 0.00 0.00 0.00 sdb 1.49 22.28 72.28 42.57 629.70 1041.58 14.55 135.56 834.31 8.71 100.00 

这些数字是否与单个磁盘所期望的性能一致?

sdb专用于后缀

我认为这是排队洗牌,从传入 – >活动 – >延期

来自问题的更多细节:

服务器:四核至强(R)CPU E5405 @ 2.00GH,带4 GB内存

平均载荷:464.88,489.11,483.91,4芯。 但内存利用率和CPU是最小的

Postfix实例在16 – 32之间

这听起来有点疯狂,但你应该:

  1. 把日志logging转到最低限度,你需要。 使syslog只loggingmail.err或更高。
  2. 添加更多的RAM。 是的,Postfix不需要它,但额外的RAM意味着内核的额外页面caching。
  3. 你没有提及/ dev / sdb上的文件系统(这也是一些问题),但是肯定noatime它切换到noatime ,这会至less减less一些负载。
  4. 看看你的/ var / spool / postfix有多大。 如果是在一些情况下,可以考虑把它移动到虚拟磁盘上。

我不同意那些build议使用RAM磁盘“/ var / spool / postfix”。 这意味着你的整个邮件队列将被存储在RAM中。 如果您的服务器崩溃或失去能力,队列中的消息将永远消失。 从客户/用户的angular度来看这真的很糟糕,因为这个消息已经被成功地接受了。 更糟糕的是,您的服务器不会发送通知,说明邮件被退回或无法发送,因为服务器恢复时队列将为空。

相反,我会添加尽可能多的快速磁盘,你可以负担得起; 我不能真正估计你所需要的信息。 从上面的“iostat”输出中,看起来你正在对'sdb'(r / s和w / s之和)进行〜120 IOPS。 您可以合理地估计一个15k RPM SCSI或FC磁盘将可以处理150 IOPS。 我将从5个15k RPM SCSI磁盘和一个像样的RAID控制器开始。 将其设置为具有1个热备份的4个驱动器中的RAID-10。 我不确定这会完全解决你的问题,但绝对不会让事情变得更糟。

在一些分析器(gprof?)下运行postfix,或者查看日志。 Postfixlogging了大量的时间信息,可能会告诉你在哪里等待。 常见的地方是:

  1. 磁盘性能。 您的队列可能是RAID-10的时间。
  2. 消息上的任何一种networkingIO。 DNS黑名单? SAV?
  3. Milters和其他已安装的filter。
  4. 身份validation和UID查找是通过networking或进程(ldap,sql)完成的。
  5. 不使用代理:对于慢速地图(如上所述)

假设吞吐量是恒定的,每天一百万条消息大约是每秒11个消息。 Postfix本身应该能够处理比入门级服务器硬件至less大一个数量级。 所以我怀疑你不仅仅是运行Postfix,还是分布非常不均衡的吞吐量峰值。

您的情况当然看起来像一个沉重的I / O绑定的服务器。 这是MTA的预期,它需要做很多小的写入来保证它不会丢失邮件。

花时间调整/var/spool/postfix/var/log上的I / O。 繁忙的postfix服务器的最佳做法是将两个不同的主轴分开,并确保启用了asynchronous日志logging。 在Linux上使用破折号前缀邮件日志的日志文件名称。

 mail.info -/var/log/mail.log 

或类似的。

如果您使用的是amavisd-new,请确保其工作区位于tmpfs文件系统上。 我们通常把它放在/tmp/vscan/ 。 这是安全的,因为amavisd-new在下游(后filter)跳接收到消息之前不会返回数据结束响应。

有些人推荐使用postfix spool的noatime mount选项。 由于postfix依赖于文件系统语义,这可能是不明智的。 请参阅http://archives.neohapsis.com/archives/postfix/2006-01/1916.html

这绝对看起来像你的磁盘子系统至less应该被视为问题的一部分。 由于postfix在/ var文件混洗文件的方式,我会build议使用“调整ext3文件系统”(至less设置noatime和writeback)来search文件系统级别的性能。

我有两个服务器群,它们为用户指定的电子邮件增加了DNS和出站SMTP,并且每天(2k-10k /小时)运行25万条消息,远不及那种I / O绑定。

看起来像一个存储性能瓶颈给我。

99.88的iowait告诉你,你的系统在你的存储上花费了很多时间。

我同意比尔·韦斯的观点。 你应该看看队列的raid10设置。

或开始

 vmstat 1 

moshenbuild议的“iostat 1”也不错

从你的数据显然更快的磁盘子系统将是很好的。 raid-10在6-8 15k rpm的磁盘上可能有一些高速caching,几个内存板载。

使用noatime,nodiratime选项安装您的假脱机目录。 考虑调整或改变你的文件系统来处理大量的小我假设的文件。

布赖恩

你真的需要一个更快的磁盘,或者最好移动到RAID解决scheme。 这是什么样的服务器?

詹姆士

如果您正在运行amavis进行垃圾邮件和病毒过滤,则应该增加并发amavis进程的数量。 根据您的设置,您可能需要增加postfix master.cf中的smtp-amavis进程的数量,以及amavis.conf中的相关设置。

盒子里有多less个核心,实际负载是多less? 您收到的邮件的实际费率是多less?

最喜欢的,我的第一个想法是磁盘,所以检查。

但是,networking利用率可能是原因,可能是高中断负载(坏卡?),所以检查这些。 我发现,即使是一个适度的邮件服务器,在同一个盒子上有一个快速cachingDNS服务器(我偏向于“解除绑定”)有助于缓解延迟和networking负载。

你每秒读取630次和1042次写入,我绝对build议你在系统中加大内存(以更好地处理操作系统和RAM驱动器),然后让你的postfix文件夹成为虚拟硬盘。

如果不是自己的磁盘,也build议把你的邮件日志放在自己的分区上。

这不是一个IO问题,这是一个后缀configuration问题。 你要求它一次做太多,为自己创造一个瓶颈。 查看postfix性能调优自述文件和/或发布您的main.cf,所以我们可以提供帮助。

看起来你有一个狡猾的磁盘。 你的服务器只做72读取请求/秒和42写/秒。 我的希捷7200 RPM桌面硬盘每秒钟可以做100个以上的随机读取/写入请求,但仍然可以应付。

尝试在sda上安装线轴,看看负载是否变好。

但是,在您在磁盘上投入更多资金之前,请执行以下操作:

  1. 运行qshape active,qshape延迟,然后qshape传入,让我们知道每个命令的总数。

    延期队列中的邮件数量过多意味着您的邮件服务器可能被垃圾邮件发送者用来转发垃圾邮件(例如,将电子邮件发送到不存在的域名,这将导致您的邮件一次又一次地重试)。

  2. 确保你的邮件服务器没有被列入黑名单( http://www.mxtoolbox.com/blacklists.aspx

  3. 检查DNS响应时间并运行本地DNScaching。

    邮件服务器使用DNS相当繁重。 做dig somedomain.com mx运行它几个不同的主机。 一般来说,响应时间应该小于100 – 400毫秒。 如果你得到更高的回应,你的DNS可能performance不佳。 尝试不同的DNS(你可以尝试谷歌的8.8.8.8或OpenDNS:208.67.222.222)

  4. 检查你的networking。 (如ifconfig),看看有多less错误包。 检查您的链接是否饱和或形状。 检查邮件日志中是否有超时的操作。 做tcpdump并确保数据包不会丢失或重新传输。

  5. 你能告诉我们,如果控制台是响应式的(例如,当你键入一些命令有多快,系统给你反馈)?

    一般来说,networking问题(如DNS)会导致负载急剧上升,但系统仍然是响应式的。