Часто бывают случаи, когда вам нужно быстро оценить, что делает ваш веб-сервер.
Иногда, чтобы успокоить, «кажется, это не он».
Когда на сервере один апач, один сайт и нагрузка небольшая, проблем нет. Я зашёл и осмотрелся.
Посмотрел /server-status, по логам сделал Tail -f, помедитировал - и обычно все понятно.
Однако бывает ситуация, когда сайтов много, самих апачей много (почти все операционки сейчас из коробки могут запускать несколько веб-серверов Apache, но почему-то это используется редко).
Бывает ситуация, когда apache больше не может отвечать.
Было бы неплохо хотя бы примерно прикинуть, что делают (или уже сделали) работники Apache. Представь - ты делаешь PS-aux , а у вас там - кто какие URL запрашивает, какая ширина канала, какая скорость работы - ня! Я уже довольно давно пользуюсь патчем для апача, который после разбора строки запроса записывает в имя программы IP откуда пришел запрос, что пришло в заголовке Host и саму строку запроса.
Но этот двухстрочный патч был написан 12 лет назад для Apache версии 1.3. И тогда они не дошли до этого.
Более того, с того времени появилось множество типов модулей (за пять минут я нашел как минимум два) для этих целей, для более новых версий Apache. Однако со временем одних строк запроса мне стало недостаточно.
И.
я написал свой модуль.
Доктор, где вы взяли эти фотографии?
Поначалу меня мучило отсутствие документации для разработчиков Apache. Нужные крючки пришлось искать, перечитав весь исходный код. Нет, когда ты уже пишешь 10-й модуль, это может быть здорово, но когда он первый и может быть последний, это проблема.Когда мне удалось найти хук ap_hook_monitor(), который вызывается из корневого процесса apache каждые 20 запросов или каждую 1 секунду, меня одолела жажда втиснуть в строку как можно больше классной статистики.
Перепробовал всякие статусы, количества, загрузку за 10 секунд, 1 минуту, 5 минут, аптайм.
Но посмотрев результат, я понял, что эта мишура только мешала и оставил только битрейт и количество запросов в секунду .
Самым важным нововведением модуля являются значения Complete и Incomplete Listen Queue Lenght. Это когда мы пишем BackLog где-то в httpd.conf, то в этой очереди накапливаются запросы, которые сервер не успевает принять.
А когда очередь заполняется, их начинают выбрасывать.
Обычно это происходит из-за хабраэффекта, например, или если сайт обращается к стороннему ресурсу, но он «лежат» или заблокирован (как, например, недавно github).
И здесь нам очень помогают номер в очереди на прослушивание и номер qps.
Как все плохо в этих ваших линуксах
Внезапно оказалось, что с небольшими жертвами модуль можно написать только под FreeBSD. Чтобы изменить имя программы, существует функция setproctitle(), и вы можете просмотреть полную и неполную длину очереди прослушивания, вызвав getockopt() с параметрами SO_LISTENQLEN и SO_LISTENINCQLEN. Для Linux все сложнее.Вам нужно взять имя исполняемого файла и всегда добавлять его отдельно (FreeBSD делает это автоматически).
Это необходимо, поскольку подавляющее большинство rc-скриптов используют имя, которое светится в пс для целей запуска/перезапуска.
Для Linux оказалось сложно найти значения Listen Queue. Пока вижу вариант работы с netlink(7).
Но детали неуловимы.
Присоединяйся
Для FreeBSD + Apache 2.4 модуль абсолютно работоспособен.Вы можете попробовать это на других версиях Apache. Мы можем и должны помочь портировать его на Linux. Модуль распространяется в исходном коде и вы можете делать с ним все, что захотите: github.com/schors/mod_proctitle P.S. Кстати, хочу дополнить куда-нибудь функцией периодического сброса статистики по UDP. Немного более полное.
Теги: #Apache #FreeBSD #linux #mod_proctitle #Хостинг #открытый исходный код
-
Основы Продвижения Сайта
19 Oct, 24 -
Плохой Сон == Хорошая Работа?
19 Oct, 24 -
Умри, Но Не Сейчас
19 Oct, 24