У меня есть проблема с apache2 httpd. Апач использует mpm_prefork, и веб-приложение использует php.
Я заметил, что машина, где апачские выполнения внезапно спадает до 0%-го использования CPU в течение ночи. Когда я пошел для исследования проблемы, я видел, 75 апачских процессов (75 MaxClients), и они все ничего не сделали.
Когда я straced, апач обрабатывает каждые из них, дал следующий вывод
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)
это - соединение с другим хостом. по-видимому, эта другая машина (также в нашей сети) неправильно функционирует во время cronjob в середине ночи и не отвечает вообще на запросы на ~2hours. Хорошо, я в настоящее время не могу решать проблему с другой машиной, и также я не забочусь о благополучии других машин.
Все я, который - wan't, чтобы процессы умерли, если они не могут закончить вовремя. По-видимому, процессы в опросе syscall не рассчитывают с точки зрения php max_execution_time.
Я могу так или иначе сказать апачу избавляться от этих устаревших процессов?
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