故障现象
普通用户ssh登陆不上系统,普通用户终端报类似系统资源不足的报错,登陆root用户发现xbar用户开启了很多sendmail进程,而且很多已经成为僵尸进程了。下面是截图:
可以看到有很多sendmail 进程,因为是线上服务器,我们统计了进程在15000左右,肯定是超过了当时系统设置的限制的,所以首先我们去重新修改以下xbar用户的系统资源限制,使其能正常工作。
vim /etc/security/limits.conf
* soft core 10240
* hard core 10240
* hard nofile 32768
* soft nofile 32768
* hard nproc 32768
* soft nproc 32768
添加了上面的参数后xbar用户可以正常登陆了,接下来排查产生异常snedmail进程的原因
排查步骤
1、通过内容分析,sendmail进程是由系统计划任务(crond)引起,原因是当系统在执行计划任务的时候,如果有标准输出或者标准错误输出,会触发sendmail程序,来发送邮件,如果输出信息太大的话会引发失败,成为僵尸进程。
2、知道诱发原因后,排查xbar用户的计划任务,因为涉及到隐私,这里就不上传截图了,但是从该用户的计划任务可以分析出,确实所有的计划任务都没有配置输出重定向。基本锁定问题原因。
解决问题
所有的计划任务后配置输出重定向,对于不需要计划任务日志的可以输出重定向到空设备中(/dev/null),即可解决不再产生sendmail异常进程的问题 。具体的配置方法示例:
# crontab -e
利用 2>&1 输出入重定向
* * * * * /bin/sh /tmp/test.sh > dev/null 2>&1
或利用 &> 输出入重定向
* * * * * /bin/sh /tmp/test.sh &> dev/null
或在计划任务的首航添加 MIALTO=""
MIALTO=""
* * * * * /bin/sh /tmp/test.sh
以上三种方法皆可解决此问题。
最后,喜欢我的技术文章的朋友请关注我的个人微信公众号,不定期更新技术文档,解决运维技术问题,作者是一个六年经验的运维老鸟,有问题也可以通过微信公众号私信我,看我能否为你解决问题。