Postfix 性能

Postfix 性能

在 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 专用于 postfix。

我认为这是队列改组,从传入->活动->延迟

问题的更多细节:

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

平均负载:464.88、489.11、483.91,4 核。但内存利用率和 CPU 很少

16 - 32 之间的后缀实例

答案1

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

  1. 将日志记录减少到所需的最低限度。使 syslog 仅记录 mail.err 或更高级别的错误。
  2. 添加更多 RAM。是的,Postfix 不需要它,但额外的 RAM 意味着内核的额外页面缓存。
  3. 您没有提到 /dev/sdb 上的文件系统是什么(这也很重要),但肯定将其切换到noatime,这至少可以减轻一点负载。
  4. 查看 /var/spool/postfix 有多大。如果少于几 GB,请考虑将其移动到 ramdisk。

答案2

我不同意那些建议使用 RAM 磁盘存储“/var/spool/postfix”的人。这意味着您的整个邮件队列将存储在 RAM 中。如果您的服务器崩溃或断电,队列中的邮件将永远消失。从客户端/用户的角度来看,这确实很糟糕,因为邮件已被成功接受并准备发送。更糟糕的是,您的服务器不会发送通知,说明电子邮件被退回或无法发送,因为当服务器恢复时队列将为空。

相反,我会添加尽可能多的快速磁盘;我无法根据给出的信息真正估计您需要多少个磁盘。从上面的“iostat”输出来看,您似乎正在对“sdb”执行约 120 IOPS(r/s 和 w/s 的总和)。您可以合理地估计单个 15k RPM SCSI 或 FC 磁盘将处理 150 IOPS。我将从 5 个 15k RPM SCSI 磁盘和一个不错的 RAID 控制器开始。将其设置为 4 个驱动器上的 RAID-10,并带有 1 个热备用。我不确定这是否能完全解决您的问题,但肯定不会使问题变得更糟。

答案3

在某些分析器(gprof?)下运行 postfix,或者查看日志。Postfix 会记录大量时间信息,这些信息可能会告诉您延迟在哪里。常见的查看位置是:

  1. 磁盘性能。您的队列可能是时候使用 RAID-10 了。
  2. 消息上有任何类型的网络 IO。DNS 黑名单?SAV?
  3. 您安装的过滤机和其他过滤器。
  4. 通过网络或进程(ldap、sql)进行身份验证和 UID 查找。
  5. 不使用代理:对于慢速地图(如上)

答案4

看起来您的磁盘子系统至少应该被视为问题的一部分。由于 postfix 在 /var 中移动文件的方式,我建议在 Google 上搜索“调整 ext3 文件系统”(至少设置 noatime 和 writeback)以查看您是否无法在文件系统级别提高性能。

我有两组服务器,它们同时承担着发往客户电子邮件的 DNS 和出站 SMTP 任务,每天运行 25 万条消息(每小时 2k-10k 条),但几乎没有这种 I/O 绑定。

相关内容