linux邮件服务导致机器内存oom问题
# Linux
故障现象
- 内存在爬梯且没有下降的迹象
排查思路
- 尝试使用阿里云主机监控查看高内存应用
- 尝试查看系统日志是否有相关报错
- 回忆这段时间干了什么东西
故障分析
- ❌ 可能是某个应用内存泄漏(检查过top就只有mysql是top1并且mysql内存没有上升趋势)
- ✔️ 通过系统日志检查发现,系统自带的邮件服务(postfix)好多warning。意识到好像是因为这段时间点击宝塔的垃圾清理导致开始内存飙升。
具体总结
crond在执行脚本时会将脚本输出信息以邮件的形式发送给系统用户,要调用sendmail,而sendmail又会调用postdrop发送邮件,但是系统的postfix服务没有正常运行,那么邮件就会发送不成功,postdrop老是执行失败,致使持续写入日志到日志文件。日志文件增大的速率超过了logrotate的删除频率,所以导致资源耗尽。
后续
重启邮件服务恢复正常
$ systemctl restart postfix.service
为了后续清理垃圾不再出现这种坑爹问题,需要将crontab执行结果发送到email的逻辑去掉(执行脚本有记录日志在其他地方)
清空maillog文件,停止所有的sendmail,postdrop进程,修改/etc/crontab中MAILTO=root 为MAILTO=" "设置成空,crond仍然会调用sendmail发送邮件,再把crond执行的命令最后加上 &> /dev/null 2>&1 ,crond不再sendmail 是需要重启下crond服务的