SMTP发邮件导致服务器死机。

🔍 死机原因分析

  1. 内存耗尽 - Postfix进程消耗过多内存
  2. CPU 100% - 邮件处理导致CPU饱和
  3. 磁盘I/O阻塞 - 邮件队列写入导致磁盘繁忙
  4. 文件句柄耗尽 - 打开太多连接
  5. 死锁 - 邮件服务内部死锁

 

🚨 立即诊断和修复

诊断脚本:

#!/bin/bash
echo "=== SMTP死机问题诊断 ==="

# 1. 检查系统资源使用历史
echo "1. 检查系统资源使用情况:"
echo "内存使用:"
free -h
echo -e "\nCPU使用:"
top -bn1 | head -10
echo -e "\n磁盘I/O:"
iostat -x 1 2 2>/dev/null | tail -5

# 2. 检查Postfix进程
echo -e "\n2. Postfix进程检查:"
ps aux | grep postfix | head -10
echo -e "\n进程数量:"
ps aux | grep -c postfix

# 3. 检查邮件队列
echo -e "\n3. 邮件队列状态:"
mailq 2>/dev/null | head -20
echo -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 -a
echo -e "\n文件句柄:"
cat /proc/sys/fs/file-nr

# 7. 检查网络连接
echo -e "\n7. 网络连接状态:"
netstat -an | grep :25 | wc -l
echo "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/bash
echo "=== 深度诊断SMTP死机问题 ==="

# 1. 检查系统资源限制
echo "1. 系统资源限制:"
cat /proc/sys/kernel/pid_max
cat /proc/sys/kernel/threads-max
cat /proc/sys/vm/overcommit_memory
cat /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 --show
free -h

# 5. 检查磁盘空间
echo -e "\n5. 磁盘空间:"
df -h
echo -e "\nInode使用:"


登陆