继续阅读完整内容
支持我们的网站,请点击查看下方广告
SMTP发邮件导致服务器死机。
🔍 死机原因分析:
- 内存耗尽 - Postfix进程消耗过多内存
- CPU 100% - 邮件处理导致CPU饱和
- 磁盘I/O阻塞 - 邮件队列写入导致磁盘繁忙
- 文件句柄耗尽 - 打开太多连接
- 死锁 - 邮件服务内部死锁
🚨 立即诊断和修复:
诊断脚本:
#!/bin/bashecho "=== SMTP死机问题诊断 ==="
# 1. 检查系统资源使用历史echo "1. 检查系统资源使用情况:"echo "内存使用:"free -hecho -e "\nCPU使用:"top -bn1 | head -10echo -e "\n磁盘I/O:"iostat -x 1 2 2>/dev/null | tail -5
# 2. 检查Postfix进程echo -e "\n2. Postfix进程检查:"ps aux | grep postfix | head -10echo -e "\n进程数量:"ps aux | grep -c postfix
# 3. 检查邮件队列echo -e "\n3. 邮件队列状态:"mailq 2>/dev/null | head -20echo -e "\n队列大小:"find /var/spool/postfix -type f -name "*" | wc -l
# 4. 检查系统日志echo -e "\n4. 系统日志(最近错误):"dmesg | tail -20 | grep -i "oom\|killed\|panic\|error"journalctl -xe --since "5 minutes ago" | tail -30
# 5. 检查邮件日志echo -e "\n5. 邮件日志:"sudo tail -50 /var/log/mail.log 2>/dev/null | grep -i "error\|fatal\|warning\|timeout"
# 6. 检查资源限制echo -e "\n6. 系统资源限制:"ulimit -aecho -e "\n文件句柄:"cat /proc/sys/fs/file-nr
# 7. 检查网络连接echo -e "\n7. 网络连接状态:"netstat -an | grep :25 | wc -lecho "SMTP连接数: $(netstat -an | grep :25 | wc -l)"
完全重置配置
#!/bin/bash
echo "=== 完全重置Postfix配置 ==="
# 1. 停止Postfix
echo "1. 停止Postfix..."
sudo systemctl stop postfix
# 2. 备份当前配置
echo "2. 备份所有配置..."
BACKUP_DIR="/root/postfix_backup_$(date +%Y%m%d_%H%M%S)"
sudo mkdir -p "$BACKUP_DIR"
sudo cp -r /etc/postfix "$BACKUP_DIR/"
sudo cp -r /var/spool/postfix "$BACKUP_DIR/spool_backup"
# 3. 重新安装Postfix
echo "3. 重新安装Postfix..."
sudo apt-get install --reinstall -y postfix
# 4. 交互式配置
echo "4. 交互式配置Postfix..."
sudo dpkg-reconfigure postfix << 'EOF'
localhost
localhost
root@localhost
/>localhost
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
0
+
all
EOF
# 5. 创建最小化配置
echo "5. 创建最小化配置..."
sudo tee /etc/postfix/main.cf << 'EOF'
# 基本配置
myhostname = localhost
mydomain = localhost
myorigin = $myhostname
# 网络设置
inet_interfaces = all
inet_protocols = all
# 目的地
mydestination = localhost, localhost.localdomain, $myhostname
# 网络限制
mynetworks = 127.0.0.0/8 [::1]/128
# 安全设置
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
readme_directory = no
# 性能
mailbox_size_limit = 0
recipient_delimiter = +
disable_vrfy_command = yes
# 基本中继控制
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
EOF
# 6. 清理master.cf,禁用465端口(暂时)
echo "6. 简化master.cf配置..."
sudo cp /etc/postfix/master.cf /etc/postfix/master.cf.backup
sudo sed -i '/^smtps/d' /etc/postfix/master.cf
sudo sed -i '/^submission/d' /etc/postfix/master.cf
# 7. 启动服务
echo "7. 启动Postfix..."
sudo systemctl start postfix
# 8. 测试
echo "8. 测试基本邮件功能..."
echo "重置配置测试 $(date)" | mail -s "配置重置测试" root
echo "9. 检查状态..."
sudo systemctl status postfix --no-pager | head -5
echo "邮件日志:"
sudo tail -5 /var/log/mail.log
echo "=== 重置完成 ==="
echo "现在邮件系统应该稳定了。"
echo "如果需要SSL,请逐步重新配置。"
📋 诊断死机根本原因:
#!/bin/bashecho "=== 深度诊断SMTP死机问题 ==="
# 1. 检查系统资源限制echo "1. 系统资源限制:"cat /proc/sys/kernel/pid_maxcat /proc/sys/kernel/threads-maxcat /proc/sys/vm/overcommit_memorycat /proc/sys/vm/overcommit_ratio
# 2. 检查Postfix进程限制echo -e "\n2. Postfix进程限制:"sudo grep -r "process_limit\|default_process_limit" /etc/postfix/
# 3. 检查是否有内存泄漏echo -e "\n3. 内存使用趋势:"ps aux --sort=-%mem | head -10
# 4. 检查系统交换空间echo -e "\n4. 交换空间状态:"swapon --showfree -h
# 5. 检查磁盘空间echo -e "\n5. 磁盘空间:"df -hecho -e "\nInode使用:"