Количество подключений Apache
- Подробности
- Категория: Apache
- Просмотров: 35
Если у вас посещаемый сайт, то вам нужно знать об этом параметре...иначе вас настигнет пора, когда вы увидите как медленно загружаются картинки и тд
Количество подключений Apache определяется параметром MaxRequestWorkers (или MaxClients для версий ниже 2.3.13) , который обычно равен 256 и зависит от ListenBacklog, то есть при изменении первого надо изменить и второй параметр.
Как это может выглядеть в панели Hestia:
<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>
где:
- StartServers: число процессов, которые запускаются при старте Apache.
- MinSpareServers и MaxSpareServers: минимальное и максимальное количество процессов, которые держатся в резерве.
- ServerLimit: максимальное количество процессов Apache (в целом).
- MaxClients или MaxRequestWorkers: максимальное число одновременных клиентских соединений (в разрезе prefork = максимальному количеству дочерних процессов).
- MaxRequestsPerChild: максимальное количество запросов на дочерние процессы.
Для НАЧАЛА вам может понадобиться настроить только MaxClients (MaxRequestWorkers) и ServerLimit, остальные параметры на первом этапе можно оставить по умолчанию.
---
Обратите внимание: настройка может происходить в файле самого мода /etc/apache2/mods-available/mpm_prefork.conf , хотя они дублированы и в /etc/apache2/apache2.conf . Что из них работает сейчас выясняю.
Вопрос возник из-за полезной команды диагностики и подсчета как раз MaxRequestWorkers:
curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl
которая показала мне значение 150, хотя в /etc/apache2/apache2.conf я выставлял 300
Apache's MaxRequestWorkers directive: 150 <--------- Current Setting
---
MinSpareServers настраивается в зависимости от RAM памяти, по дефолту стоят минимальные значения.
- Виртуальный выделенный сервер 5
- Выделенный сервер с 1-2 ГБ ОЗУ 10
- Выделенный сервер с 2-4 ГБ ОЗУ 20
- Выделенный сервер с 4+ ГБ ОЗУ 25
MaxSpareServers - максимальное количество простаивающих процессов должно быть, естественно, больше MinSpareServers (но даже, если будет ошибка и будет меньше, то Апач все равно сделает его на 1 больше). Данный параметр также нужно устанавливать в соответствие с вашим ОЗУ, так как простаивающие процессы занимают ценные ресурсы.
А теперь о главном, а именно то, что Apache поставляется сейчас с MPM (Multi-Processing Modules) - prefork, worker и event. Чтобы определить какой модуль у вас попробуйте выполнить эту команду
1) Prefork (его настройку мы разобрали выше) - является практически самым безопасным, и тут используется множество дочерних процессов с ОДНИМ потоком на каждый.
Преимущества:
- изолированность процессов (ошибки в одном процессе не заденут другие)
- стабильность
!!! Родительский процесс запускает дочерний процесс для обслуживания запросов. Чтобы клиент не ждал пока запустятся дочерние процессы, Apache всегда держит наготове РЕЗЕРВНЫЕ процессы Spare или idle . Поэтому, если много свободного ОЗУ, то можно эти параметры повышать:
- MinSpareServers - повышать, если одновременно может быть более установленного количества процессов (для крупных сайтов)
- MaxSpareServers - тоже можно повышать, но не сразу.
2) В случае, если активирован модуль worker, то тут также, есть свои особенности и состоят они в том, что он сочетает в себе мульти-процессорный (multi-process) и мульти-поточный (multi-threaded) сервер. Родительский процесс создает дочерние, которые работают со МНОЖЕСТВОМ потоком (не более ThreadedPerChild величины).
Как это может выглядеть в панели Hestia:
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>
!!! Worker применялся, в основном, для версий Apache до 2.4
Плюсы:
- меньше потребляет ресурсов
- хорошо работает с большим трафиком
Минусы:
- есть несовместимости с некоторыми
3) Модуль Event - наоборот, работает с версии Apache 2.4 и имеет свои особенности, а в частности то, что часть запроса могут передаваться отдельным потокам (listeners threads). Данный модуль более прогрессивный и еще не все перешли на него. После первого запроса Prefork и worker Apache сохраняет дочерний процесс / поток, ожидающий данных от клиента, что приводит к неэффективному расходу ресурсов. Чтобы решить эту проблему, event использует выделенный поток (listener thread) для каждого процесса для обработки сокетов в состоянии Listening и поэтому нет нужды еще раз создавать еще одно TCP соединение. То есть, работа по обработке запроса передается вспомогательным процессам, а основные потоки уже принимают новый запрос...это очень сильно уменьшает издержки.
Как это может выглядеть в панели Hestia:
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>
Как определить количество подключений Apache: можно через netstat и ss - первый уже устаревает, а второй набирает популярность, но и то и то работает...