Відповіді:
Префорк і працівник - це два типи MPM-апашей. Обоє мають свої достоїнства та недоліки.
За замовчуванням mpm є префорком, який захищений потоком.
Prefork MPM використовує кілька дочірніх процесів з одним потоком кожен, і кожен процес обробляє по одному з'єднанню одночасно.
WorkMem MPM використовує кілька дочірніх процесів з багатьма потоками кожен. Кожна нитка обробляє по одному з'єднанню.
Для отримання більш детальної інформації ви можете відвідати https://httpd.apache.org/docs/2.4/mpm.html та https://httpd.apache.org/docs/2.4/mod/prefork.html
Багатопроцесорні модулі Apache (MPM) відповідають за прив'язку до мережевих портів на пристрої, прийняття запитів та відправлення дітей для обробки запитів ( http://httpd.apache.org/docs/2.2/mpm.html ).
Вони, як і будь-який інший модуль Apache, за винятком того, що на сервер потрібно будь-коли завантажувати лише один і лише один MPM . MPM вибираються під час конфігурації та компілюються на сервер , використовуючи аргумент --with-mpm=NAMEіз сценарієм configure, де NAMEє ім'я потрібного MPM.
Apache використовуватиме MPM за замовчуванням для кожної операційної системи, якщо інший не буде обраний під час компіляції (наприклад, для Windows mpm_winntвикористовується за замовчуванням). Ось перелік операційних систем та їх MPM за замовчуванням:
beosmpm_netware mpmt_os2 prefork( оновлення для версії Apache ≥ 2.4 : prefork, workerабо event, в залежності від можливостей платформи)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-сервера Core Apache, які завжди доступніmpm_common - Колекція директив, що реалізуються більш ніж одним модулем багатопроцесорної обробки (MPM)beos - Цей багатопроцесорний модуль оптимізований для BeOS.event - Експериментальний варіант стандартного робітника MPMmpm_netware Багатопроцесорний модуль, що реалізує виключно потоковий веб-сервер, оптимізований для Novell NetWarempmt_os2 Гібридний багатопроцесорний багатопотоковий MPM для OS / 2prefork Реалізує веб-сервер із попередньою форкінгом без потокуmpm_winnt - Цей багатопроцесорний модуль оптимізовано для Windows NT.worker - Багатопроцесорний модуль, що реалізує гібридний багатопотоковий багатопроцесорний веб-серверТепер, на різницю між preforkі worker.
реалізує веб-сервер, що не має потоку, попередньо роздвоєний та обробляє запити аналогічно Apache 1.3. Він підходить для сайтів, яким потрібно уникати потоків для сумісності з бібліотеками, не безпечними для потоків. Це також найкращий MPM для ізоляції кожного запиту, так що проблема з одним запитом не торкнеться жодного іншого.
У workerMPM реалізує гібридну багатозадачність многопоточного сервер і дає більш високу продуктивність, тому воно повинно бути кращим , якщо один не використовують інші модулі , які містять не-поточно-бібліотеку (див також дискусію або це на Serverfault).
Погляньте на це для більш детальної інформації. Це стосується того, як Apache обробляє декілька запитів. Оформлення, яке за замовчуванням, запускає ряд процесів Apache (2 за замовчуванням тут, хоча я вважаю, що це можна налаштувати через httpd.conf). Worker MPM запустить новий потік на запит, який, я б здогадався, є більш ефективним у пам’яті. Історично компанія Apache використовувала префорк, тому це модель, що краще перевірена. Threading було додано лише у 2.0.
Для CentOS 6.x та 7.x (включаючи Amazon Linux) використовуйте:
sudo httpd -V
Це покаже вам, які з MPM налаштовані. Або префорк, працівник, або подія. Prefork - це більш рання, безпечна модель. Worker є багатопотоковою, а подія підтримує php-mpm, який повинен бути кращою системою для обробки потоків та запитів.
Однак ваші результати можуть відрізнятися залежно від конфігурації. Я бачив багато нестабільності в php-mpm, а не будь-які покращення швидкості. Агресивний павук може досить легко вичерпати максимальні дочірні процеси в php-mpm.
Установка для prefork, робочого або події встановлюється в 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
Ви можете сказати, чи Apache використовує заготовку чи робітника, видавши таку команду
apache2ctl -l
У отриманому результаті шукайте згадки prefork.c або worker.c
apachectl -Vподивитися на висновок поруч Server MPM. Також можна перевірити ps auxі шукати httpdабо httpd.worker.
apache2ctl -lне вийшло; довелося використовувати apachectl -l.
httpd -Vвийде щось на зразок:Server MPM: worker
Легко перемикатися між 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
У Apache визначено 2 типи MPM (багатообробних модулів):
1: Префорк 2: Робітник
За замовчуванням Apacke налаштований у попередньо встановленому режимі, тобто без потокового веб-сервера для попереднього розгортання. Це означає, що кожен дочірній процес Apache містить одну нитку і обробляє по одному запиту за раз. Через це вона споживає більше ресурсів.
Apache також має MPM-робочий, який перетворює Apache на багатопроцесорний багатопотоковий веб-сервер. WorkMem MPM використовує кілька дочірніх процесів з багатьма потоками кожен.