Apache mpm prefork


Apache prefork — mpm или модуль мультипроцессовой обработки. Задает как именно веб-сервер работает с соединениями.

Используются три mpm: prefork, worker и event. В рамках данного материала рассмотрим первый из них.



Apache prefork — настройки mpm


Секция, определяющая параметры работы prefork находится обычно в основном конфигурационном файле. Иногда она может быть вынесена в другой файл и подключаться при помощи include.

В Ubuntu настройки находятся в /etc/apache2/mods-available/mpm_prefork.conf


less /etc/apache2/apache2.conf

# prefork MPM
# StartServers:
number of server processes to start
# MinSpareServers:
minimum number of server processes which are kept spare
# MaxSpareServers:
maximum number of server processes which are kept spare
# MaxRequestWorkers:
maximum number of server processes allowed to start
# MaxConnectionsPerChild:
maximum number of requests a server process serves StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 0 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet


Пример приведен на скриншоте:

Apache prefork



mpm prefork работает с процессами и может настраиваться изменением значений в конфигурационном файле с последующим перезапуском сервиса.


Перезапуск выполняется через systemd:

systemctl restart apache2



* В CentOS сервис будет называться не apache2, а httpd. В остальном всё идентично.



По параметрам в настройках есть краткая справка в комментариях.



StartServers — определяет сколько процессов создается при запуске Apache.

MinSpareServers — минимальное количество процессов, которое должно существовать всегда; если запросов не будет эти процессы сервером завершаться не будут и продолжат ожидать запросов

MaxSpareServers — максимальное количество процессов веб-сервера; при большом количестве запросов будут создаваться новые процессы до лимита устанавливаемого этой директивой

MaxRequestWorkers — число запросов, которые могут обслуживаться одновременно. Для prefork — это максимальное количество процессов поскольку все они обслуживаются в один поток — если значение увеличивается — то же значение нужно задать директивой ServerLimit

MaxConnectionsPerChild — лимит по процессам, которое могут обслуживаться одним 'сервером' за время его жизни; 'сервер' (процесс) прекращает существовать обслужив установленное количество



Значение последнего параметра по-умолчанию равно 0, т.е. время жизни процесса не ограничено, ограничение ставят для сокращения количества памяти, утечка которой возможна.



Как выбрать значения настроек mpm prefork Apache


Значения подбираются в зависимости от нагрузки — если процессов много и нагрузка растет количество процессов можно уменьшить, процессы будут обрабатываться по очереди и может несколько увеличиться время ответа, но нагрузка станет меньше.



Если же наоборот наблюдается малое время ответа — стоит увеличить количество процессов. Каждая ситуация индивидуальна и начинать следует с анализа причин нагрузки и списка активных процессов.



Другой популярный mpm — worker оперирует не процессами как таковыми, а потоками. В потоках выполняются процессы. worker дает лучшую производительность и используется чаще всего.



Читайте про настройку Apache для работы при высоких нагрузках.

Сказать спасибо