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 по умолчанию:
- 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- экспериментальный вариант стандартный рабочий MPMmpm_netwareмультипроцессорный модуль, реализующий исключительно потоковый веб-сервер, оптимизированный для Novell NetWarempmt_os2гибридный мульти-процесс, многопоточный MPM для OS / 2preforkреализует непоточный, предварительно разветвляющийся веб-серверmpm_winnt- этот модуль мульти-обработки оптимизирован для Windows NT.worker- модуль мульти-обработки снабжая гибридное многопоточное мультипроцессный веб-сервертеперь, к разнице между
preforkиworker.The
preforkMPMреализует непоточный, предварительно разветвляющийся веб-сервер, который обрабатывает запросы аналогично Apache 1.3. Он подходит для сайты, которые должны избегать потоковой передачи для совместимости с не потокобезопасные библиотеки. Это также лучший MPM для изоляции каждого запрос, так что проблема с одним запрос не повлияет на другой.
The
workerMPM реализует гибридный многопроцессный многопоточный сервер и обеспечивает более высокую производительность, поэтому он должен быть предпочтительным, если не используются другие модули, содержащие библиотеки, не являющиеся потокобезопасными (см. Также эта дискуссия или этой 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