我正在调查一个我尚未设置的服务器,并且没有技术人员可以回答问题。
问题是平均负载很高,导致服务器无法发送电子邮件!它会定期发生,有时每分钟会发生几次,平均负载可高达 80!
我注意到有时可能需要一个小时才能真正发送电子邮件,我想更好地了解服务器上发生的情况。
我会定期(有时每分钟几次,平均负载可能高达 80)在邮件日志中收到如下消息:
Feb 9 01:37:54 mydomain sm-mta[999]: rejecting connections on daemon MTA-v4: load average: 48
我不知道这是什么原因,但似乎电子邮件实际上并没有被发送,所以我想知道可能发生了什么。
有时,电子邮件似乎确实被发送了。我唯一知道的是发送电子邮件的是网络服务器,因此从 www-data 发送的电子邮件是有意义的。我不知道是什么发送了这些。
Feb 9 01:54:22 mydomain sendmail[6704]: r1...: from=www-data, size=1380, class=0, nrcpts=1, msgid=<[email protected]>, relay=www-data@localhost
Feb 9 01:54:23 mydomain sm-mta[6706]: r1... from=<[email protected]>, size=1482, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Feb 9 02:01:02 mydomain sendmail[6751]: r1...: from=root, size=323, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Feb 9 02:01:02 mydomain sm-mta[6752]: r1...: from=<[email protected]>, size=597, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
netstat -ntop 仅显示 apache2 进程。
有哪些方法可以解决这个问题?
答案1
您应该发出一个命令mailq
,看看队列中有多少封邮件。我猜可能有很多,尤其是如果这是运行发送电子邮件的 PHP 应用程序的 Web 服务器(并被垃圾邮件发送者滥用)。
第一次尝试逆转默认的 sendmail 负载管理配置:
define(confREFUSE_LA, 8)dnl
define(confQUEUE_LA, 12)dnl
将这些放入您的并根据您的操作系统的指示sendmail.mc
生成并重新启动 sendmail。sendmail.cf
通过检查输出,mailq
找到队列文件并检查队列中邮件的内容。这将让您了解谁发送了这些电子邮件以及原因。也就是说,如果太多电子邮件是导致您出现问题的原因。
其他原因可能是滥用(配置不当)邮件客户端(POP3 或 IMAP)或其他导致高负载的因素。
根据您的进度,您可能需要在机器前进行监控以查看(并分析)进来的东西和出去的东西。
同样,根据您的发现,您可能需要在 security.stackexchange.com 上再次询问这个问题。
编辑:您应该记住,当机器的负载超过某个阈值时,sendmail 会开始拒绝处理电子邮件的请求。对于达到该阈值,sendmail 可能不负责任。其他进程(如 Web 服务器、cronjob、对配置不当的 MySQL 的查询)可能导致机器交换,这可能是罪魁祸首。