crond不断唤起sendmail导致资源耗尽的排查

版权声明:文章可以转载,转载请注明原出处链接 https://blog.csdn.net/pengzhouzhou/article/details/88667297
本文主要介绍了crond不断唤起sendmail导致资源耗尽的排查相关内容。
上篇文章回顾: 理解Nginx中Server和Location的匹配逻辑

春节值班期间收到反馈,c3-im-msg-tun001.bj 和 c3-im-msg-tun002.bj 这两台服务器资源使用异常,主要是mem和disk,监控图如下,图中资源占用突降是手动清理进程和文件的结果,这种手段治标不治本。

                                                               内存图

                                                                硬盘图

异常现象检查

内存异常

发现很多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]https://unix.stackexchange.com/questions/109665/what-causes-cron-to-continuously-send-mail-and-how-can-i-disable-it

[2]https://unix.stackexchange.com/questions/138392/where-does-cron-look-for-the-default-mail-binary

[3]https://www.centosdoc.com/system/136.html

[4]http://www.10tiao.com/html/666/201611/2654108436/1.html

文章首发于共公众号“小米运维”,点击查看原文

猜你喜欢

转载自blog.csdn.net/pengzhouzhou/article/details/88667297
今日推荐