[故障分析]出现大量僵尸进程(zombie)
2017-11-25 15:47
267 查看
环境:SUSE Linux Enterprise Server 11 SP2
检测到一个suse系统的zombie达到100多个
登录服务器检测
首先查询是哪个进程引起的
注:这是我后面重现故障的数据
但是这个脚本并没有问题的,也没人改过,以前一直是正常运行的。
看一下这个脚本的父进程是哪个程序
发现这些进程的父进程都是cron,也就是定时任务程序crontab
进这个用户查看一下
发现提示没有权限进入/var/spool/cron这个目录
再看一下这个程序的权限:
原来少了s位
s位相当于给普通用户临时提权的作用
crontab 少了s位就没办法执行
加上s位
把原先的僵尸进程全部杀掉
注意:要杀父进程,子进程是杀不掉的
本来以为成功解决了这个问题
但观察了一下,僵尸进程还是在产生。
查了一下历史记录,发现有人在前一天执行过
chmod 775 /usr -R
这样把/usr目录下所有带有s位的程序全部消除了。
看来还有其它的程序受到了影响而引起crontab的不正常运行。
查看一下crontab是否有调用其它进程:
原来crond在执行脚本时会调用sendmail将脚本输出信息以邮件的形式发送给crond用户
查看了一下sendmail进程数
果然有很多
但是在其它系统中查看,sendmail并没有带s位的,而看pstree中,后面还会调用postdrop处理邮件,在其它系统中查看了一下postdrop,是带有s位的,正是因为前面执行chmod 755 /usr -R
把这个程序的s位也去掉了,引起cron权限问题,而造成进程变成僵尸进程。
给这个程序添加上s位:
观察了一下,没有再出现僵尸进程了。
可以将/etc/crontab的MAILTO设为”“,这样crontab不再发送日志
排查僵尸进程常用命令:
ps -ef|grep defu
strace(有一次就碰到一个脚本产生僵尸进程,就通过这个命令进行跟踪解决的,也是非常有用的一个命令)
lsof
ldd
pstree
检测到一个suse系统的zombie达到100多个
登录服务器检测
首先查询是哪个进程引起的
ps -ef|grep defu sfhadm 7444 7443 0 02:10 ? 00:00:00 [test.sh] <defunct> sfhadm 7463 7462 0 02:12 ? 00:00:00 [test.sh] <defunct> sfhadm 7481 7480 0 02:14 ? 00:00:00 [test.sh] <defunct>
注:这是我后面重现故障的数据
但是这个脚本并没有问题的,也没人改过,以前一直是正常运行的。
看一下这个脚本的父进程是哪个程序
linux-dkcm:~ # ps -ef|grep 7443 root 7443 3282 0 01:12 ? 00:00:00 /usr/sbin/cron
发现这些进程的父进程都是cron,也就是定时任务程序crontab
进这个用户查看一下
$crontab -l cannot chdir(/var/spool/cron), bailing out. /var/spool/cron: Permission denied
发现提示没有权限进入/var/spool/cron这个目录
再看一下这个程序的权限:
ls -la /usr/bin/crontab -rwxr-xr-x 1 root trusted 40432 Jan 24 2012 /usr/bin/crontab
原来少了s位
s位相当于给普通用户临时提权的作用
crontab 少了s位就没办法执行
加上s位
chmod 6755 /usr/bin/crontab
把原先的僵尸进程全部杀掉
注意:要杀父进程,子进程是杀不掉的
ps -ef|grep defunct|grep -v grep|awk '{print $3}'|xargs kill -9
本来以为成功解决了这个问题
但观察了一下,僵尸进程还是在产生。
查了一下历史记录,发现有人在前一天执行过
chmod 775 /usr -R
这样把/usr目录下所有带有s位的程序全部消除了。
看来还有其它的程序受到了影响而引起crontab的不正常运行。
查看一下crontab是否有调用其它进程:
#pstree init─┬─acpid ├─auditd─┬─audispd───{audispd} │ └─{auditd} ├─bonobo-activati───{bonobo-activati} ├─console-kit-dae───63*[{console-kit-dae}] ├─cron───17*[cron─┬─sendmail───postdrop] │ └─test.sh]
原来crond在执行脚本时会调用sendmail将脚本输出信息以邮件的形式发送给crond用户
查看了一下sendmail进程数
果然有很多
ps -ef|grep sendmail|wc -l 309
但是在其它系统中查看,sendmail并没有带s位的,而看pstree中,后面还会调用postdrop处理邮件,在其它系统中查看了一下postdrop,是带有s位的,正是因为前面执行chmod 755 /usr -R
把这个程序的s位也去掉了,引起cron权限问题,而造成进程变成僵尸进程。
给这个程序添加上s位:
chmod 6755 /usr/bin/postdrop
观察了一下,没有再出现僵尸进程了。
可以将/etc/crontab的MAILTO设为”“,这样crontab不再发送日志
排查僵尸进程常用命令:
ps -ef|grep defu
strace(有一次就碰到一个脚本产生僵尸进程,就通过这个命令进行跟踪解决的,也是非常有用的一个命令)
lsof
ldd
pstree
相关文章推荐
- 用oradebug short_stack及strace -p分析oracle进程是否dead或出现故障
- 用oradebug short_stack及strace -p分析oracle进程是否dead或出现故障
- 分析案例:应用服务无响应,任务管理器中发现大量w3wp僵尸进程----等待异构系统WebService返回值
- 服务器产生大量僵尸进程,查询并杀死zombie
- Linux服务器nginx访问日志里出现大量400错误分析
- zombie僵尸进程、孤儿进程和守护进程
- vcenter出现大量孤立的主机分析
- Fedora 下 Google-Chrome 经常出现僵尸进程的权宜办法
- Linux 的僵尸(zombie)进程
- Apache ab压力测试时出现大量的错误原因分析
- linux查找僵尸进程(zombie进程
- Win7系统桌面出现一个白色框框无法关闭的故障分析及解决方法
- 某局不定时出现网络延迟故障分析 网络故障分析
- Linux 的僵尸(zombie)进程
- 电脑系统经常出现蓝屏现象, 分析各种蓝屏故障分析
- 关于Mac终端故障一直出现 [进程已完成]
- reap linux zombie process 僵尸进程
- 一个存在三年的内核 bug 引发大量的容器系统出现网络故障
- 通过JVM堆栈分析线程出现大量异常的原因
- 一个杀不死的小强,kill进程无效的原因 记录故障排查过程中kill进程无效的分析过程