Глядя на конфигурационный файл Apache, я вижу Prefork и WorkM MPM. В чем разница и какой из них использует Apache?
Apache Prefork vs Worker MPM
Ответ 1
Предпрограмма и работник - это два типа MPM apache. Оба имеют свои достоинства и недостатки.
По умолчанию mpm - это предпрок, который является потокобезопасным.
Prefork MPM использует несколько дочерних процессов с одним потоком каждый, и каждый процесс обрабатывает одно соединение за раз.
Рабочий MPM использует несколько дочерних процессов со многими потоками. Каждый поток обрабатывает одно соединение за раз.
Более подробную информацию вы можете найти https://httpd.apache.org/docs/2.4/mpm.html и https://httpd.apache.org/docs/2.4/mod/prefork.html
Ответ 2
Многопроцессорные модули Apache (MPM) отвечают за привязку к сетевым портам на машине, прием запросов и диспетчеризацию запросов для обработки запросов (http://httpd.apache.org/docs/2.2/mpm.html).
Они похожи на любой другой модуль Apache, за исключением того, что только один и только один MPM должны быть загружены на сервер в любое время. MPM выбираются во время конфигурации и скомпилированы на сервер, используя аргумент --with-mpm=NAME
с конфигурацией script, где NAME
- это имя желаемого MPM.
Apache будет использовать MPM по умолчанию для каждой операционной системы, если другой вариант не выбран во время компиляции (например, в Windows mpm_winnt
используется по умолчанию). Вот список операционных систем и их MPM по умолчанию:
- BeOS
beos
- Netware
mpm_netware
- OS/2
mpmt_os2
- Unix/Linux
prefork
( обновление для версии Apache ≥ 2.4:prefork
,worker
, илиevent
, в зависимости от возможностей платформы) - Windows
mpm_winnt
Чтобы проверить, какие модули скомпилированы на сервере, используйте параметр командной строки -l
(здесь - это документация). Например, при установке Windows вы можете получить что-то вроде:
> httpd -l
Compiled in modules:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c
Начиная с версии 2.2 это список доступных основных функций и модулей MPM:
-
core
- Основные функции сервера HTTP Apache, которые всегда доступны -
mpm_common
- набор директив, реализованных более чем одним модулем многопроцессорной обработки (MPM) -
beos
- этот многопроцессорный модуль оптимизирован для BeOS. -
event
- экспериментальный вариант стандартного рабочего MPM -
mpm_netware
Многопроцессорный модуль, реализующий исключительно поточный веб-сервер, оптимизированный для Novell NetWare -
mpmt_os2
Гибридный многопроцессорный многопоточный MPM для OS/2 -
prefork
Реализует безпоточный веб-сервер с предварительной печатью. -
mpm_winnt
- этот многопроцессорный модуль оптимизирован для Windows NT. -
worker
- Многопроцессорный модуль, реализующий гибридный многопоточный веб-сервер с несколькими процессами
Теперь, к разнице между prefork
и worker
.
реализует не-поточный, предварительно открытый веб-сервер, который обрабатывает запросов аналогично Apache 1.3. Он уместен для сайты, которым необходимо избегать потоковой передачи для совместимости с небезобезопасные библиотеки. Это также лучший MPM для изоляции каждого запрос, так что проблема с одним запросом не повлияет на другие.
worker
MPM реализует гибридный многопроцессорный многопроцессорный сервер и дает лучшую производительность, поэтому он должен быть предпочтительным, если только он не является используя другие модули, которые содержат потокобезопасные библиотеки (см. также это обсуждение или this на Serverfault).
Ответ 3
Посмотрите этот для более подробной информации. Это относится к тому, как Apache обрабатывает несколько запросов. Предварительная загрузка, которая по умолчанию, запускает несколько процессов Apache (по умолчанию здесь по умолчанию, хотя я считаю, что это можно настроить через httpd.conf). Рабочий MPM запустит новый поток за запрос, который, как я полагаю, более эффективен с точки зрения памяти. Исторически сложилось так, что Apache использовал prefork, так что это более проверенная модель. Threading был добавлен только в версии 2.0.
Ответ 4
Для CentOS 6.x и 7.x(включая Amazon Linux) используйте:
sudo httpd -V
Это покажет, какой из MPM настроен. Либо предпродак, рабочий, либо событие. Prefork - это более ранняя, потокобезопасная модель. Рабочий является многопоточным, а событие поддерживает php-mpm, который, как предполагается, является лучшей системой для обработки потоков и запросов.
Однако ваши результаты могут отличаться в зависимости от конфигурации. Я видел много нестабильности в php-mpm, а не улучшения скорости. Агрессивный паук может легко исчерпать максимальные дочерние процессы в php-mpm.
Настройки для предка, рабочего или события устанавливаются в sudo nano/etc/httpd/conf.modules.d/00-mpm.conf(для CentOS 6.x/7.x/Apache 2.4).
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#LoadModule mpm_event_module modules/mod_mpm_event.so
Ответ 5
Вы можете узнать, использует ли Apache преформу или работника, выполнив следующую команду
apache2ctl -l
В результирующем результате найдите ссылки на prefork.c или worker.c