我今天重新启动我的Apache守护进程重新加载configuration文件,但在此之后,我开始在系统上看到许多PHP僵尸进程。 数量在10到30之间变化,在死亡的时候它们都会占用一点CPU。 我应该从哪里开始debugging这个问题?
我做的修改是减less最大请求每个孩子从0(海量内存泄漏)到1000.我认为,PHP进程是从一个脚本,从“哑”设备接收数据,即。 他们用GET参数发送一个请求,而不关心结果。
一些数据:
uname -a
# uname -a Linux <hostname> 2.6.32-71.29.1.el6.x86_64 #1 SMP Mon Jun 27 19:49:27 BST 2011 x86_64 x86_64 x86_64 GNU/Linux
ps -aux | grep的PHP
# ps aux | grep php user1 5709 1.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5717 1.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5721 1.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5722 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5723 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5724 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5725 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5729 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5731 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5737 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5760 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5778 1.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5793 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5798 1.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5800 1.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5833 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5850 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5870 3.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5875 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5876 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5877 2.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5886 0.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5926 0.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5939 0.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5941 0.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5961 0.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5962 0.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5973 0.0 0.0 0 0 ? Z 12:15 0:00 [php] <defunct> user1 5977 0.0 0.2 106836 8680 ? R 12:15 0:00 /usr/bin/php /home/user1/public_html/<script>.php root 5981 0.0 0.0 103228 836 pts/0 S+ 12:15 0:00 grep php
自由
# free -m total used free shared buffers cached Mem: 3831 3173 658 0 183 2502 -/+ buffers/cache: 487 3344 Swap: 4031 7 4024
运行时间
# uptime 12:18:10 up 105 days, 23:21, 1 user, load average: 0.23, 0.20, 0.18
还有什么需要帮助我debugging呢?
这不是一个问题。 僵尸不会占用CPU,内存或其他任何非进程表插槽。 僵尸并没有停留很长时间,你说过,所有发生的事情是,Apache主进程正在做的事情,而不是等待subprocess退出,所以有时需要一段时间才能终止孩子们得到了收获。
一个僵尸程序只是一个父母已经死亡/被杀的过程,还没有整理好。
如果在服务重启过程中发生这种情况,那完全正常 你应该阅读linux进程状态,粗略的信息就在这里:
- 运行:这是一个进程正在运行或准备运行的状态。
- 可中断:这个状态是一个进程的阻塞状态,等待来自另一个进程的事件或信号
- 不间断的:这也是一个封锁的状态。 在某些情况下,硬件状态被等待,信号不能被处理,这个过程被迫停止。
- 停止:一旦过程完成,这种状态发生。 这个过程可以重新启动
- 僵尸:在这种状态下,进程将被终止,信息在进程表中仍然可用。
如果它发生在你的web服务器的正常使用期间(我们正在讨论php进程),你可能会暂时用cronjob修复这个问题,每分钟做一次apache平稳重启( service apache2 reload ),但是这并不能解决潜在的问题吃掉你的可用插槽。
在第二种情况下,你需要辨别哪个主机是造成僵尸和应用程序必须修复。 99%的僵尸是由程序devise不当的网站造成的。