一例qmail外发邮件慢的解决方法 F#脚本
照以往案例,首先检查dns,服务器上nslookup后,一切正常。
查看下qmail当前队列状态,
qmailctl queue|more
出现如下信息
messages in queue but not yet preprocessed: 51,观察了一段时间,这个值一直将不下来,说明qmail-send运行异常
跟踪当前日志,
tail -f /var/log/qmail/current |tai64nlocal
有不少类似“warning: unable to stat mess/15/3629875” 的消息出现,这些队列任务应该已经损坏了,qmail-fix的动作太大,可以直接动手删除,注意先停止qmail服务
qmailctl stop
find /var/qmail/queue/ -name 队列ID | xargs rm -f
因为损坏队列比较多,通过脚本执行
more /var/log/qmail/current |tai64nlocal |grep -e "^2011-05-12 23:10:23" |grep "warning: unable to stat mess" | awk '{ print $7}'|sed -e 's/mess\/[0-9]\+\///' > /var/work/badQueueId.log
上面是从current日志中,找出最新的损坏队列id号,新建clearNotPreProcess.sh如下
#!/bin/sh #clearNotPreProcess.sh warnlogfile="/var/work/badQueueId.log" for line in `cat $warnlogfile`; do find /var/qmail/queue/ -name $line | xargs rm -f; done;
执行./clearNotPreProcess.sh 批量删除
开启qmail服务
qmailctl start
再看看qmail运行状态
qmailctl stat
messages in queue but not yet preprocessed: 0
凡事都有但是,发件仍然很慢,睁大眼睛看current日志
status: local 0/30 remote 39/40 ,并发数接近用满
调整并发参数,将 /var/qmail/control/concurrencyremote 的数值调到190,重启qmail,问题解决。
小注意点:qmail在队列繁忙时,经常不能一下停掉,多试几次,耐心等待,尽量避免去强杀qmail-remote进程
上一篇: 中国web2.0前途是什么
下一篇: 如何规划你的职业发展道路