Apache2: как регистрировать отклоненные соединения и время ожидания клиента - PullRequest
1 голос
/ 24 февраля 2020

Я выполняю нагрузочное тестирование в сервисе, запущенном с Apache2, и у моего инструмента нагрузочного тестирования по умолчанию установлено время ожидания 30 секунд. Когда я запускаю инструмент в течение минуты с загрузкой 1 запроса в секунду, он сообщает, что 40 успешно с ответом 200 OK и 20 запросов были отменены, поскольку время ожидания клиента превысило время ожидания заголовков.

Теперь я пытался определить это на стороне сервера. Я не вижу тайм-ауты, зарегистрированные в журналах доступа apache или журналах доступа Gunicorn. Обратите внимание, что меня интересуют соединения, которые не были приняты, а также приняты и время ожидания истекло.

У меня есть некоторый опыт работы с аналогичными службами на Windows. Журналы ошибок http.sys будут показывать ошибки сброса соединения, и мы будем знать, сбрасывает ли наш сервер соединения.

1 Ответ

1 голос
/ 28 февраля 2020

Когда время ожидания клиента истекло, сервер знает, что клиент прервал соединение. В конфигурации mod_log спецификатор формата %X используется для регистрации состояния клиентского подключения после завершения запроса, что в данном случае и нужно знать.

Screenshot from mod_log's config docs

Настройте свои журналы для использования %X и найдите символ X в строках журнала.

Бонус: Я даже нашел обсуждение об этой функции на apache форуме разработчиков, с 20 лет go

Обновление: Относительно отказано в подключении, они не могут быть зарегистрированы apache. Отказ в соединении осуществляется ядром, в стеке tcp, а не apache. Самое близкое решение, включая только apache, о котором я могу подумать, - это отслеживание количества открытых соединений (используя mod_status). Если он достигает максимального значения, вы знаете, что можете отказаться от подключения. В противном случае вам потребуется настроить какое-либо решение для мониторинга, чтобы отслеживать сбросы tcp, отправленные ядром.

...