Apache Prefork vs Worker MPM



глядя на конфигурационный файл Apache, я вижу, что Prefork и рабочий MPM определены. В чем разница и какой из них использует Apache?

766   6  

6 ответов:

Prefork и worker-это два типа 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

многопроцессорные модули Apache (MPMs) отвечают за привязку к сетевым портам на машине, прием запросов и отправку дочерних элементов для обработки запросов (http://httpd.apache.org/docs/2.2/mpm.html).

они похожи на любой другой модуль Apache, за исключением того, что просто один и только один MPM должен быть загружен на сервер в любое время. MPMs выбираются во время настройки и составлен в сервер С помощью аргумента --with-mpm=NAME С помощью скрипта настройки, где NAME - это имя нужного MPM.

Apache будет использовать MPM по умолчанию для каждой операционной системы, если не выбран другой во время компиляции (например, в Windows mpm_winnt используется по умолчанию). Вот список операционных систем и их MPMs по умолчанию:

чтобы проверить, какие модули компилируются в сервер, используйте параметр командной строки -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.

The prefork MPM

реализует непоточный, предварительно разветвляющийся веб-сервер, который обрабатывает запросы аналогично Apache 1.3. Он подходит для сайты, которые должны избегать потоковой передачи для совместимости с не потокобезопасные библиотеки. Это также лучший MPM для изоляции каждого запрос, так что проблема с одним запрос не повлияет на другой.

The worker MPM реализует гибридный многопроцессный многопоточный сервер и обеспечивает более высокую производительность, поэтому он должен быть предпочтительным, если не используются другие модули, содержащие библиотеки, не являющиеся потокобезопасными (см. Также эта дискуссия или этой on Serverfault).

посмотри этой подробнее. Это касается как Apache обрабатывает несколько запросов. Preforking, который является по умолчанию, запускает ряд процессов Apache (2 по умолчанию здесь, хотя я считаю, что это можно настроить через httpd.conf). Рабочий MPM запустит новый поток на запрос, который, как я предполагаю, более эффективен в памяти. Исторически сложилось так, что Apache использовал prefork, поэтому это более проверенная модель. Резьба была добавлена только в 2.0.

Для CentOS 6.X и 7.X (включая Amazon Linux) использование:

sudo httpd -V

Это покажет вам, какие из MPMs настроены. Либо префорк, рабочий, либо событие. Префорка раньше, модель ориентирована на многопотоковое исполнение. Worker является многопоточным, а event поддерживает php-mpm, который должен быть лучшей системой для обработки потоков и запросов.

однако ваши результаты могут отличаться в зависимости от конфигурации. Я видел много нестабильности в php-mpm, а не каких-либо улучшений скорости. Один агрессивный паук может довольно легко исчерпать максимум дочерних процессов в php-mpm.

настройка для prefork, worker или event задается в sudo nano /etc/httpd/conf.модули.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

вы можете сказать, использует ли Apache преформу или рабочий, выполнив следующую команду

apache2ctl -l

в результирующем выводе найдите упоминания о prefork.c или рабочий.c

его легко переключаться между prefork или рабочего mpm в Apache 2.4 на RHEL7

Проверьте тип MPM, выполнив

sudo httpd -V

Server version: Apache/2.4.6 (Red Hat Enterprise Linux)
Server built:   Jul 26 2017 04:45:44
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

теперь, чтобы изменить MPM редактировать следующий файл и раскомментировать требуется MPM

 /etc/httpd/conf.modules.d/00-mpm.conf 

# 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

Comments

    Ничего не найдено.