我在大约 10 台服务器的服务器群中使用 sendmail,每分钟处理 200-500 条消息。我发现在迁移到虚拟环境后,我最大的瓶颈是磁盘写入,特别是 sendmail 日志输出和邮件队列。
我无法控制硬件并修改那里的任何东西。
我有两个问题:1) 是否可以将 sendmail 日志压缩后输出到磁盘?这不仅可以减少总磁盘写入量,而且无需在日志轮换期间进行压缩。
2) 我如何设置 sendmail 以便尽可能不将临时文件写入邮件队列?
编辑:提供更多信息:我无法访问有关硬件或虚拟机管理程序的信息(据我了解,它在 VMWare Enterprise 平台上运行)。文件系统是 ext4。服务器的目的是充当网关系统,在邮件服务器之前提供轻度病毒和垃圾邮件过滤。
答案1
减少 sendmail 日志 I/O 负载
1)您是否在每次日志条目之后关闭了日志文件的 fsync?
在 /etc/syslog.conf 中准备好日志文件名-
mail.* -/var/log/mail
2)您可以考虑使用单一/集中式日志服务器来处理电子邮件事件[参见 adamo 评论]
rsyslogd 支持基于 TCP 的转发 -http://linux.die.net/man/5/rsyslog.conf
答案2
减少“互联网到内部”网关的 I/O 负载
您可以使用“双交互”投递模式来减少 I/O 操作。它会在执行投递尝试后延迟向“最后一个点”发送 ACK。对于内部邮件服务器的高可用性来说,这是值得考虑的。
define(`confDELIVERY_MODE',`interactive')
define(`confSAFE_QUEUE',`interactive')
Nick Christenson 撰写的“Sendmail 性能调优”(第 3.2 节“同步”)还建议在使用“双重交互”传送模式时考虑增加 XF 和 DF 缓冲区。
define(`confXF_BUFFER_SIZE',`16384')dnl 16KB; default=4KB
define(`confDF_BUFFER_SIZE',`102400')dnl 100KB; default=4KB
很可能您的 milters I/O 需求也可以进行微调。