Модули многопроцессорной обработки (MPM)
В этом документе описывается, что такое модуль многопроцессорной обработки и как они используются сервером Apache HTTP.
Введение
Сервер Apache HTTP предназначен для того, чтобы быть мощным и гибким веб-сервером, который может работать на широком спектре платформ в различных средах. Разные платформы и среды часто требуют разных функций или могут иметь разные способы наиболее эффективной реализации одной и той же функции. Apache httpd всегда поддерживал широкий спектр сред благодаря своей модульной архитектуре. Эта архитектура позволяет веб-мастеру выбирать, какие функции будут включены в сервер, выбирая, какие модули загрузить либо во время компиляции, либо во время выполнения.
Apache HTTP Server 2.0 расширяет эту модульную архитектуру до основных функций веб-сервера. Сервер поставляется с набором модулей многопроцессорной обработки (MPM), которые отвечают за привязку к сетевым портам на машине, прием запросов и отправку дочерних процессов для обработки этих запросов.
Расширение модульной архитектуры до этого уровня сервера дает две важные преимущества:
- Apache httpd может более чисто и эффективно поддерживать широкий спектр операционных систем. В частности, версия сервера для Windows теперь намного эффективнее, так как
mpm_winntможет использовать собственные сетевые функции вместо уровня POSIX, используемого в Apache httpd 1.3. Это преимущество также распространяется на другие операционные системы, которые реализуют специализированные MPM. - Сервер может быть лучше настроен под нужды конкретного сайта. Например, сайты, которым требуется высокая масштабируемость, могут выбрать использование многопоточного MPM, такого как
workerилиevent, в то время как сайты, требующие стабильности или совместимости со старым программным обеспечением, могут использоватьprefork.
На уровне пользователя MPM ведут себя как другие модули Apache httpd. Основное различие заключается в том, что в сервер в любой момент времени должен быть загружен только один MPM. Список доступных MPM отображается на странице индекса модулей.
Значения по умолчанию для MPM
В следующей таблице перечислены значения MPM по умолчанию для различных операционных систем. Это будет выбранный MPM, если вы не сделаете другой выбор во время компиляции.
| Netware | mpm_netware |
| OS/2 | mpmt_os2 |
| Unix |
prefork, worker, или event, в зависимости от возможностей платформы |
| Windows | mpm_winnt |
Здесь «Unix» используется для обозначения Unix-подобных операционных систем, таких как Linux, BSD, Solaris, Mac OS X и т. д.
В случае Unix решение о том, какой MPM будет установлен, основано на двух вопросах:
1. Поддерживает ли система потоки?
2. Поддерживает ли система потокобезопасный опрос (в частности, функции kqueue и epoll)?
Если ответ на оба вопроса — «да», то MPM по умолчанию — event.
Если ответ на вопрос #1 — «да», но ответ на вопрос #2 — «нет», значение по умолчанию будет worker.
Если ответ на оба вопроса — «нет», тогда значением MPM по умолчанию будет prefork.
В практическом плане это означает, что значение по умолчанию почти всегда будет event, так как все современные операционные системы поддерживают эти две функции.
Компиляция MPM как статического модуля
MPM могут быть скомпилированы как статические модули на всех платформах. Один MPM выбирается во время компиляции и подключается к серверу. Для изменения MPM необходимо перекомпилировать сервер.
Чтобы переопределить выбор MPM по умолчанию, используйте параметр --with-mpm=NAME скрипта configure. NAME — это имя желаемого MPM.
После компиляции сервера можно определить выбранный MPM, используя ./httpd -l. Эта команда отобразит каждый модуль, скомпилированный в сервер, включая MPM.
Компиляция MPM как модуля DSO
На Unix-подобных платформах MPM могут быть скомпилированы как модули DSO и динамически загружены в сервер так же, как и другие модули DSO. Компиляция MPM как модулей DSO позволяет изменить MPM, обновив директиву LoadModule для MPM, а не перекомпилируя сервер.
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Попытка LoadModule больше одного MPM приведет к ошибке запуска с указанной ошибкой.
AH00534: httpd: Configuration error: More than one MPM loaded.
Эта функция включается с помощью параметра --enable-mpms-shared скрипта configure. С аргументом all будут установлены все возможные MPM для платформы. В качестве альтернативы, можно указать список MPM в качестве аргумента.
MPM по умолчанию, выбранный автоматически или указанный параметром --with-mpm скрипта configure будет загружен в сгенерированный конфигурационный файл сервера. Измените директиву LoadModule для выбора другого MPM.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mpm.html