每当Apache在满足MaxRequestPerChild后杀死subprocess以创build新subprocess时,我会在ps输出中看到Apache进程已经停止运行。 在短时间内自行清除stream程。 但是,服务器的负载平均值暂时急剧上升。
我无法理解,为什么这些进程在被杀的时候进入死亡状态。
我在Apache中使用mod_php模块运行PHP应用程序,Apache的Pre-fork模块。 由于应用程序的需要,我无法在服务器上升级PHP。
任何想法?
你不能杀死它,因为它已经死了。 剩下的唯一东西就是进程表中的一个条目。 在Unix和类似Unix的计算机操作系统上,僵尸进程或已停止进程是已经完成执行但仍在进程表中的进程的进程。 此条目仍然需要允许父进程读取其subprocess状态。 除非有很多这样的过程,否则这样的过程是没有害处的。 僵尸最终由其父母收养(通过等待(2))。 如果原始父代在自己的退出之前没有收到它,那么init进程(pid == 1)会在稍后的时间执行它。 僵尸进程只是:
A process that has terminated and that is deleted when its exit status has been reported to another process which is waiting for that process to terminate.
我想你会在一些沉重的PHP应用程序(如Magento或Drupal的一些沉重的第三方模块),并清理退出时使用的资源(数据库连接等)需要一段时间。 同样,产生新的进程需要一些时间。
当然你的Apache也可能安装了一些沉重的模块,例如mod_security。 或者你的PHP有一些额外的模块加载。 很难说,因为你的问题很模糊,缺乏细节。