异常现象检查
内存异常
发现很多 sendmail 进程, 每分钟增加一个, 消耗内存资源
[root@c3-im-msg-tun002 ~]# ps -ef |grep sendmail | wc -l14069
硬盘异常
磁盘占用: /var/log/maillog 文件占满硬盘
查看报错
tail -fn 123 /var/log/maillogc3-im-msg-tun002 postfix/postdrop[26422]: warning: mail_queue_enter: create file maildrop/8765.26422: No such file or directory
报错原因: 缺少路径 maildrop
解决思路: 参考正常服务器, 新建缺少的文件夹
解决记录如下:
正常服务器文件权限
cd /var/spool/postfixmkdir maildrop && chown postfix.postdrop maildrop && chmod 730 maildrop
观察 sendmail 进程依旧增加
索性测试给 777 权限
chmod 777 maildrop
sendmail 进程开始消失, maildrop 中写入新文件
结合文件属组, 最后给 maildrop 配置属组 root.root , 权限 775
异常进程排查
继续查找谁唤起的 sendmail. 由之前观察进程数每分钟增加, 怀疑是定时任务.
使用 pstree 命令查看
pstree -a | more
异常进程唤醒关系梳理清楚:
init - crond - sendmail
原因分析
sendmail 是 crond 定时任务唤起的, 且每分钟增加, 故查看定时任务
重点查看每分钟都要执行定时任务
tail -fn 123 /var/log/cronFeb 14 19:02:01 c3-im-msg-tun002 CROND[73417]: (work) CMD (cd /home/work/bin/nt-tunnel-sgp-c3 && bin/monitor_perf.sh ./conf/nt-tunnel.config.sgp-c3.hostname -e hostname -t job=sgp-c3,service=nt-tunnel,servicegroup=common,cluster=c3,pdl=im,owt=miliao,cop=xiaomi)Feb 14 19:02:01 c3-im-msg-tun002 CROND[73418]: (work) CMD (cd /home/work/bin/nt-tunnel-sgp-c3 && bin/report_perf.sh ./conf/nt-tunnel.config.sgp-c3.hostname -e hostname -t job=sgp-c3,service=nt-tunnel,servicegroup=common,cluster=c3,pdl=im,owt=miliao,cop=xiaomi)
这是由 god 管理的定时任务
有关键词了, 可以查下别人的解决方案, 见文末参考文献 [1].[2].
在定时任务配置文件中添加: mailto="", 测试改为没有效果, 这个原因有待追查.
定时任务的输出
大多数运维人员或开发人员写 CRON 定时脚本时都不考虑标准输出和错误输出如何处理. 当 cron 的执行完有输出或错误出去时, cron 就会把输出内容通过邮件发送给当前用户, 如果本地邮件服务没有打开的会都会把邮件内容输出到一个文本文件存放到 / var/spool/postfix/maildrop 目录中. 打开目录中的文件, 其内容就是定时任务执行的输出, 见文末参考文献 [3].
由于没有正确处理定时任务中的输出, 这才导致服务器资源被占满.
至此问题基本解决. 但是由于定时任务太频繁, 会产生大量的小文件, 可能导致 inode 被耗尽
god 的问题
由 / var/log/cron 得到的定时任务是由 god 管理的, 在和开发确认 job 可以停掉后, 执行 god stop jobname.
经检查, 已经没有进程, 但是定时任务还在执行.
执行 nuke 后, 定时任务才被清理, 见文末参考文献 [4].
确定无效的 job 要及时 nuke.
参考文献
[1]
[2]
[3] https://www.centosdoc.com/system/136.html
[4]
来源: https://juejin.im/post/5c90b1f4e51d4542b211f16e