Количество подключений Apache

Если у вас посещаемый сайт, то вам нужно знать об этом параметре...иначе вас настигнет пора, когда вы увидите как медленно загружаются картинки и тд

Для начала определим сколько в данный момент у нас на сервере подключений:

ss -ant | grep -E ':80|:443' | wc -l

или с помощью netstat (

netstat -ant | grep -E ':80|:443' | wc -l

)

 

Или более детально с ip:

ss -ant | grep -E ':80|:443' 

 

 

Количество подключений 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 - первый уже устаревает, а второй набирает популярность, но и то и то работает...

 

Добавить комментарий


Защитный код
Обновить

Вы здесь: Сайтостроение Сисадмин Apache Количество подключений Apache