在 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/s r/s w/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 专用于后缀。
我认为这是队列改组,从传入->活动->延迟
问题的更多细节:
服务器:四核 Xeon(R) CPU E5405 @ 2.00GH with 4 GB ram
平均负载:464.88、489.11、483.91、4 核。但是内存利用率和cpu是最小的
后缀实例介于 16 - 32 之间
这可能听起来有点疯狂,但你应该:
noatime
,这至少应该减少一点负载。我不同意那些建议将 RAM 磁盘用于“/var/spool/postfix”的人。这意味着您的整个邮件队列将存储在 RAM 中。如果您的服务器崩溃或断电,队列中的消息将永远消失。从客户端/用户的角度来看,这确实很糟糕,因为消息已经被成功接受以进行传递。更糟糕的是,您的服务器不会发送通知,说明电子邮件被退回或无法送达,因为当服务器恢复运行时队列将是空的。
相反,我会尽可能多地添加快速磁盘;根据给出的信息,我无法真正估计您需要多少。从上面的“iostat”输出中,看起来您正在对“sdb”(r/s 和 w/s 的总和)执行 ~ 120 IOPS。您可以合理地估计单个 15k RPM SCSI 或 FC 磁盘将处理 150 IOPS。我将从 5 个 15k RPM SCSI 磁盘和一个不错的 RAID 控制器开始。将其设置为跨 4 个驱动器和 1 个热备用的 RAID-10。我不确定这是否会完全解决您的问题,但绝对不会使情况变得更糟。
在一些分析器(gprof?)下运行 postfix,或者查看日志。Postfix 记录了很多时间信息,这些信息可能会告诉你延迟在哪里。常见的地方有:
假设吞吐量是恒定的,每天一百万条消息大约是每秒 11 条。Postfix 本身应该能够处理至少比入门级服务器硬件大一个数量级的处理能力。所以我怀疑你不仅仅是在运行 postfix,或者吞吐量峰值分布非常不均匀。
您的情况肯定看起来像一个 I/O 密集型服务器。这对于 MTA 来说是意料之中的,它需要进行大量的小写操作以保证它不会丢失邮件。
/var/spool/postfix
花时间在和上调整 I/O/var/log
。繁忙的 postfix 服务器的最佳实践是将两者分开不同的主轴,并确保启用异步日志记录。在 Linux 上为您的邮件日志的日志文件名称添加一个破折号。或类似的。
如果您使用 amavisd-new,请确保其工作区位于 tmpfs 文件系统上。我们通常会戴上它
/tmp/vscan/
。这是安全的,因为 amavisd-new 在下游(过滤后)跃点接受消息之前不会返回数据结束响应。有些人推荐
noatime
后缀线轴的安装选项。由于后缀依赖于文件系统语义的方式,这可能是不明智的。参见例如http://archives.neohapsis.com/archives/postfix/2006-01/1916.html。看起来您的磁盘子系统至少应该被视为问题的一部分。由于 postfix 在 /var 周围混洗文件的方式,我建议在谷歌上搜索“tweak ext3 filesystem”(至少设置 noatime 和 writeback),看看你是否不能提高文件系统级别的性能。
我有两个服务器集群,它们为客户发送的电子邮件提供双重职责的 DNS 和出站 SMTP,并且每天(2k-10k/小时)运行 250k 条消息,而远不及那种 I/O 绑定。
或从
moshen建议的“iostat 1”也不错
从您的统计数据来看,显然更快的磁盘子系统会很好。在 6-8 15k rpm 磁盘上的 raid-10 可能带有一些缓存,板载几 Gigs 内存。
使用 noatime、nodiratime 选项挂载您的假脱机目录。考虑调整或更改您的文件系统以处理大量小 [我假设] 文件。
盒子里有多少个核心,实际负载是多少?您收到消息的实际速率是多少?
像大多数人一样,我的第一个想法是磁盘,所以检查一下。
但是,网络利用率可能是原因,也可能是高中断负载(坏卡?),所以检查这些。我发现即使对于一个普通的邮件服务器,在同一个盒子上拥有一个快速缓存的 DNS 服务器(我偏爱“未绑定”)也有助于减轻延迟和网络负载。
对我来说,这就像一个存储性能瓶颈。
99.88 的 iowait 告诉您,您的系统正在花费大量时间等待您的存储。
我同意比尔·韦斯的观点。您应该查看队列的 raid10 设置。
布赖恩
您确实需要获得更快的磁盘,或者最好使用 RAID 解决方案。这是什么类型的服务器?
詹姆士
如果您正在运行 amavis 进行垃圾邮件+病毒过滤,您应该增加并发 amavis 进程的数量。根据您的设置,您可能需要从 postfix master.cf 中增加 smtp-amavis 进程的数量,以及 amavis.conf 中的相关设置。