мы сталкиваемся с проблемой, что новые запросы не обрабатываются, даже если apache не достиг своего значения max_client.
Max_client установлен на 800
max_spare server - 36
min_spare сервер - 35
Тайм-аут 300
продолжать жить
время ожидания поддержки активности 10Max_keep_alive_requests 100
Почему apache не обрабатывает новые запросы и не отправляет таймауты, даже если он не достиг своего значения max_client.
Strace показал, что около 80+ дочерних элементов apache находятся в состоянии ожидания, что составляет 0,0000 секунды на выходе strace.
Почему такое количество дочерних элементов находится в состоянии ожидания и по-прежнему генерирует новых детей, но все еще не обрабатывает запрос и не отправляет тайм-аут.
мы используем Php5, Apache 2 с mpm-prefork, Mysql 5, работаем на Ubuntu 11.04 с брандмауэром CSF.
Все запросы выполняются с одного ip (нашего IP-адреса).
Приведет ли слишком большое количество запросов с одного IP-адреса к каким-либо ограничениям TCP / IP или Apache для подключения, что приведет к отклонению новых запросов?
Почему такое количество дочерних элементов находится в состоянии ожидания и по-прежнему генерирует новых детей, но все еще не обрабатывает запрос и не отправляет тайм-аут.
"Никто не знает"
Прежде всего, вы должны понимать, что создание новых процессов в префорке ОЧЕНЬ дорогое удовольствие.
Чтобы избежать этого, когда это возможно, вы настраиваете правильные параметры для загрузки вашего сервера и ожидаемых пиков трафика.
Чтобы узнать ЭТО, вы посмотрите на Статус сервера и проверьте, что это за нагрузка на самом деле - это узкое место из-за количества подключений, поддержки активности, параллелизма по IP, пропускной способности, задержек внутреннего прокси-сервера, слишком мало свободных процессов - что?
Вернитесь к нам, если вы включили server-status (и ExtendedStatus!) И поймете, что означает вывод.
возможно, вы отправляете несколько запросов через одно и то же соединение со своей тестовой системы.
в основном вы настроили:
keepalive on
maxkeepaliverequests 100
поэтому в этом сценарии, если вы генерируете несколько запросов по одному и тому же соединению, вы получаете 100 запросов.
попробуйте с:
keepalive off
или
maxkeepaliverequests 0
примечание: ваш параметр ServerLimit также должен как минимум соответствовать MaxClients