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 servesStartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 0 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Пример приведен на скриншоте:
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 для работы при высоких нагрузках.