Apache进程变得陈旧,但不会超时

我遇到了apache2 httpd问题。 Apache使用mpm_prefork和Web应用程序使用PHP。

我注意到,apache运行的机器在夜间突然下降到0%CPU使用率。 当我去调查问题时,我看到75个apache进程(75个是MaxClients),他们什么也没做。

当我把apache进程放大时,他们每个人都输出了下面的结果

Process 18845 attached - interrupt to quit restart_syscall(<... resuming interrupted call ...>) = 0 poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) 

好的,什么是FD22?

 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME /usr/sbin 18839 www-data 22u IPv4 129846157 0t0 TCP myhost:44697 -> otherhost:http-alt (ESTABLISHED) /usr/sbin 18844 www-data 22u IPv4 129860789 0t0 TCP myhost:44906 -> otherhost:http-alt (ESTABLISHED) /usr/sbin 18845 www-data 22u IPv4 129846238 0t0 TCP myhost:44791 -> otherhost:http-alt (ESTABLISHED) /usr/sbin 18848 www-data 22u IPv4 129858987 0t0 TCP myhost:44967 -> otherhost:http-alt (ESTABLISHED) /usr/sbin 18852 www-data 22u IPv4 129861780 0t0 TCP myhost:44915 -> otherhost:http-alt (ESTABLISHED) /usr/sbin 18864 www-data 22u IPv4 129856031 0t0 TCP myhost:44795 -> otherhost:http-alt (ESTABLISHED) /usr/sbin 18873 www-data 22u IPv4 129856418 0t0 TCP myhost:44908 -> otherhost:http-alt (ESTABLISHED) /usr/sbin 19225 www-data 22u IPv4 129858977 0t0 TCP myhost:44936 -> otherhost:http-alt (ESTABLISHED) /usr/sbin 19230 www-data 22u IPv4 129857945 0t0 TCP myhost:44955 -> otherhost:http-alt (ESTABLISHED) 

它连接到另一台主机。 显然这个其他机器(也在我们的networking中)在cronjob在半夜出现故障,并且完全不响应~2小时的请求。 好吧,我目前无法解决其他机器的问题,也不关心其他机器的好处。

如果不能及时完成的​​话,我将不会为了这个过程而死去。 显然轮询系统调用中的进程不计算在php max_execution_time方面。

我能不能告诉apache杀掉这些过时的进程?

 Debian GNU/Linux 7.8 apache2: 2.2.22-13+deb7u4 apache2-mpm-prefork: 2.2.22-13+deb7u4 apache2.2-bin: 2.2.22-13+deb7u4 apache2.2-common: 2.2.22-13+deb7u4 libapache2-mod-php5: 5.3.29-1~dotdeb.0 

你可以尝试一下,如果TimeOut指令可以做到这一点http://httpd.apache.org/docs/2.2/mod/core.html#timeout