Postfix 队列堆积大量邮件怎么办?怎么排查?
Postfix 队列堆积大量邮件怎么办?怎么排查?
队列状态速览:
# 查看队列分布(按目标域统计)
qshape # 显示延迟分布和数量
qshape deferred # 仅看延迟队列
# 示例输出解读:
# T 5 10 20 40 80 160 320 640 1280 1280+
# TOTAL 1532 200 300 400 300 200 100 20 10 2 0
# gmail.com 1200 150 250 350 250 150 40 8 2 0 0
# ↑ gmail.com 目标积压1200封,集中在10-40分钟延迟 → DNS或速率限制问题
常见积压原因与诊断命令:
① 目标服务器不可达:
② 被对方限速/灰名单:
③ 本地 DNS 问题:
④ 本地网络出方向受阻:
⑤ 队列 I/O 瓶颈:
① 目标服务器不可达:
grep "Connection timed out" /var/log/mail.log | tail -20② 被对方限速/灰名单:
grep "450 4.7.1\|451 4.3.0\|Server busy" /var/log/mail.log | tail -20③ 本地 DNS 问题:
time dig MX gmail.com +short 超时则 DNS 有问题④ 本地网络出方向受阻:
telnet gmail-smtp-in.l.google.com 25 无法连接则检查防火墙和 NAT⑤ 队列 I/O 瓶颈:
iostat -x 1 5 如果 %util 接近 100%,需要 SSD 或队列分区扩容。
处理策略:
① 如果队列中大多是垃圾邮件被反弹——执行
② 如果目标服务器临时故障——等待即可,Postfix 会自动按退避算法重试(默认重试 5 天,RFC 5321 Section 4.5.4.1);
③ 如果需要立即重发特定域的队列——
④ 永久性问题(如被对方列入黑名单)——解决黑名单问题后,用
① 如果队列中大多是垃圾邮件被反弹——执行
postsuper -d ALL deferred 清理所有延迟邮件(谨慎!会丢失合法延迟邮件);② 如果目标服务器临时故障——等待即可,Postfix 会自动按退避算法重试(默认重试 5 天,RFC 5321 Section 4.5.4.1);
③ 如果需要立即重发特定域的队列——
postqueue -s gmail.com(立刻刷新该域的队列);④ 永久性问题(如被对方列入黑名单)——解决黑名单问题后,用
postsuper -r ALL 将所有延迟邮件重新排队。
📎 RFC 5321 Section 4.5.4.1 重试策略;Postfix QSHAPE 文档
