Pages: 1/1 First page 1 Final page [ View by Articles | List ]

httpd与僵尸进程

[不指定 2008/03/06 22:06 | by askwan ]
在用top命令的时候,出现这个

Quotation
3021  daemon    9   0     0    0     0 Z    10.4  0.0   0:01 httpd
3046  daemon    9   0     0    0     0 Z     9.7   0.0   0:01 httpd


这大概就是传说中的“僵尸进程”,僵尸进程表现为一般指连接数过多,造成的部分进程死掉的现象,维持几秒钟后会自动消失
,网上这样定义的,“僵尸进程是指的父进程已经退出,而该进程dead之后没有进程接受,就成为僵尸进程.(zombie)进程.
由此,以后看到进程列表中有"Z"这个字母出现,基本上可以断定是僵尸进程。Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此,僵尸进程不再占有任何内存空间。”

但是,在linux系统管理中,当用ps或者top命令观察进程的执行状态时,常看到某些进程的状态栏为defunct,但在进程表(processs table)中仍占了一个位置(slot)。而进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。 还是要引起我们的警觉,一般这种情况就需要检查系统的健康状况了,我维护的机器里有一台就出现过这种现象2次。

下面的这段代码是我在网上找到的产生僵尸进程的源代码



当上述程序执行时,中间一行程序睡眠20秒,当父进程执行终止后,再用ps观察时,会发现defunct进程也随之消失,这样就有了僵尸进程出现了,它在进程表中的进入点将被删除。如果一个程序设计上有缺陷,就可能导致某个进程的父进程一直处于睡眠状态或是陷入死循环,那么当该子进程执行结束后就变成了defunct进程,这个defunct 进程会一直留在系统中直到系统重新启动。 还是很恐怖的。

                                                                             --EOF--
Pages: 1/1 First page 1 Final page [ View by Articles | List ]