减少 sendmail 系统中的磁盘写入

减少 sendmail 系统中的磁盘写入

我在大约 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 需求也可以进行微调。

相关内容