MPM — Multi-Processing Module, можно перевести как «Модуль мультипроцессовой обработки» (не путайте с мультипроцессорной!).
Если быть совсем кратким — MPM используется сервером Apache для обработки нескольких запросов несколькими процессами одновременно.
В настоящее время используется 2 основных варианта MPM — это
В этой статье постараемся разобраться — в чем разница между этими тремя MPM- Worker, PreFork и Event.
Итак, начнем с модуля PreFork — на данный момент он является наиболее распространенным модулем, и по умолчанию Apache устанавливается именно с ним.
Apache MPM PreFork запускает по отдельному процессу на каждый запрос. Иначе говоря, каждый процесс одновременно обрабатывает только 1 поток (thread) на одно соединение. Т.к. PreFork заранее создает определенное количество процессов, которые не требуют времени на отдельный вызов при поступлении запроса к серверу и не нуждаются в выполнении маршалинга (в технологии
Одним из важнейших преимуществ такого MPM является его большая безопасность, в силу того, что каждый процесс фактически изолирован от других. Его использование оправдано в тех случаях, когда используются модули, которые не поддерживают или плохо поддерживают, например — mod_php.
Apache MPM worker — использует многопоточную систему обработки запросов, что улучшает обработку большого количества соединений. MPM Worker запускает несколько процессов, которые, в свою очередь, запускают несколько потоков (threads). Эти «дочерние потоки», по аналогии с процессами MPM PreFork, ожидают входящих клиентских запросов. Такой подход является менее ресурсоёмким в плане потребления оперативной памяти сервера, в отличии от процессов PreFork. Так же, улучшается обработка большого количества одновременных запросов, т.к. в отличии от PreFork запросу необходимо только получить свободный поток, который как правило есть, что позволяет сэкономить ресурсы сервера.
К недостаткам MPM Worker относится его относительная нестабильность, по сравнению с PreFork, т.к. проблемы в одном процессе могут затронуть другие соединения.Кроме того, имейте ввиду, что Worker связывает каждое keep-alive соединение с потоком, а не с запросом, и в таком случае каждый поток может выполнятся значительное время, пока соединение не будет окончательно разорвано.
И последний — Apache MPM Event. По принципу работы он очень похож на MPM Worker. Главное отличие Event от Worker в том, что он поддерживает выделенный поток для каждого установленного соединения, и передает дочерним потокам запрос только после того, как он был непосредственно сделан. И сразу же после обработки этого запроса — поток освобождается для выполнения следующего запроса. Такой вариант отлично подходит для клиентов, которые делают не частые запросы, но поддерживают долгие keep-alive соединения с сервером.
Исключением является обработка SSL-соединений, в таких случаях Event
ведет себя аналогично Worker-у.
Что касается сравнения работы Worker и PreFork — то можно увидеть сравнения например тут>>>. Как видно, разница между ними всего несколько процентов, однако — все зависит от специфики каждого сервера и обрабатываемых им запросов.
Кроме того, многие из сравнительно старых модулей Apache требуют наличия именно MPM PreFork, что следует учитывать при выборе Multi-Processing Module для вашего сервера.
Так же, существуют ещё несколько вариантов MPM — mpm-itk, mpm-peruser и
Напоследок — несколько полезных команд.
Узнать, какой тип MPM используется в установленном Apache можно любой из команд:
# apachectl -t -D DUMP_MODULES | grep mpm
mpm_prefork_module (static)
или
# httpd -V | grep mpm
-D APACHE_MPM_DIR=»server/mpm/prefork»
Установить Apache с выбранным MPM можно из соответствующего порта:
/usr/ports/www # ls | grep apache
…
apache22
apache22-event-mpm
apache22-itk-mpm
apache22-peruser-mpm
apache22-worker-mpm
…
Порт apache22 — установит Apache с mpm_prefork.
Ссылки по теме.
http://phpsuxx.blogspot.com