
Я создаю систему мониторинга, которая будет определять, сколько (простых) запросов в данный момент обрабатывается. Метод, который я использую для определения этого, заключается в подключении к http://локальный хост/Состояние сервера .
Вопрос в том, если Apache не может обслуживать больше новых подключений (например, MaxClients
достиг вершины), как я могу обнаружить статистику Apache? Возможно ли, что Apache достаточно умен, чтобы игнорировать MaxClients
конфигурацию для подключений с localhost?
Любая помощь будет оценена по достоинству.
решение1
Я считаю, что ответ — нет, по двум причинам (и третьей, неясной):
Предположим, что запросы
/server-status/
были бы неуязвимы кMaxClients
(но увеличивали количество клиентов). Тогда стало бы слишком легко DoS-апачу с запросами, так что легитимные запросы не могли бы быть обслужены (и поскольку они могут быть намного большеMaxClients
, нет никаких шансов, что на настоящие запросы когда-либо ответят)Apache, скорее всего, будет иметь количество клиентов, основанное на [некоторой функции] количества открытых соединений (одно соединение может
:80
отправлять только один запрос за раз, ноKeepAlive
позволяет нам использовать его повторно, поэтому одно открытое TCP-соединение по сути является одним клиентом). Это будет проверяться еще до того, как будут прочитаны заголовки (если есть место, он делегирует запрос для обработки. Если места нет, он быстро завершится неудачей).Когда я перегружен соединениями,
service httpd fullstatus
работает очень медленно или вообще не работает :-)
решение2
Вам может понадобиться написать модуль apache (или изменить mod_status), чтобы другой интерфейс использовался для связи с сервером apache. Вы можете захотеть использовать сигналы posix и общую память или файл для запроса и получения статистики.