Назад | Перейти на главную страницу

Apache не обрабатывает новые запросы, не достигнув значения max_client. Со многими неактивными дочерними элементами

мы сталкиваемся с проблемой, что новые запросы не обрабатываются, даже если apache не достиг своего значения max_client.

Max_client установлен на 800
max_spare server - 36
min_spare сервер - 35
Тайм-аут 300
продолжать жить
время ожидания поддержки активности 10

Max_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