Patrząc na plik konfiguracyjny Apache, widzę zdefiniowane Prefork i Worker MPM. Jaka jest różnica i który z nich jest używany przez Apache?
113
Prefork i pracownik to dwa rodzaje MPM, które zapewnia apache. Obie mają swoje zalety i wady.
Domyślnie mpm to prefork, który jest bezpieczny dla wątków.
Prefork MPM używa wielu procesów potomnych, z których każdy ma jeden wątek, a każdy proces obsługuje jedno połączenie na raz.
Worker MPM używa wielu procesów potomnych, z których każdy ma wiele wątków. Każdy wątek obsługuje jedno połączenie naraz.
Więcej informacji można znaleźć na stronach https://httpd.apache.org/docs/2.4/mpm.html i https://httpd.apache.org/docs/2.4/mod/prefork.html
Moduły wieloprocesorowe Apache (MPM) są odpowiedzialne za wiązanie z portami sieciowymi na komputerze, przyjmowanie żądań i wysyłanie dzieci do obsługi żądań ( http://httpd.apache.org/docs/2.2/mpm.html ).
Są jak każdy inny moduł Apache, z wyjątkiem tego, że tylko jeden MPM musi być załadowany na serwer w dowolnym momencie . MPM są wybierane podczas konfiguracji i kompilowane na serwerze przy użyciu argumentu
--with-mpm=NAME
w skrypcie konfiguracyjnym, gdzieNAME
jest nazwą żądanego MPM.Apache użyje domyślnego MPM dla każdego systemu operacyjnego, chyba że w czasie kompilacji zostanie wybrany inny (na przykład
mpm_winnt
domyślnie używany jest system Windows ). Oto lista systemów operacyjnych i ich domyślnych MPM:beos
mpm_netware
mpmt_os2
prefork
( aktualizacja do wersji Apache ≥ 2.4 :prefork
,worker
, lubevent
, w zależności od możliwości platformy)mpm_winnt
Aby sprawdzić, jakie moduły są wkompilowane na serwer, użyj opcji wiersza poleceń
-l
( tutaj jest dokumentacja). Na przykład w instalacji systemu Windows możesz otrzymać coś takiego:Od wersji 2.2 jest to lista dostępnych podstawowych funkcji i modułów MPM :
core
- Podstawowe funkcje serwera Apache HTTP, które są zawsze dostępnempm_common
- Zbiór dyrektyw, które są implementowane przez więcej niż jeden moduł wieloprocesorowy (MPM)beos
- Ten moduł wieloprocesorowy jest zoptymalizowany pod kątem systemu BeOS.event
- Eksperymentalny wariant standardowego MPM pracownikampm_netware
Moduł wieloprocesorowy implementujący wyłącznie wielowątkowy serwer sieciowy zoptymalizowany pod kątem Novell NetWarempmt_os2
Hybrydowy, wieloprocesowy, wielowątkowy MPM dla OS / 2prefork
Implementuje nietechniczny serwer sieciowy typu pre-forkingmpm_winnt
- Ten moduł wieloprocesorowy jest zoptymalizowany dla systemu Windows NT.worker
- Moduł Multi-Processing implementujący hybrydowy, wielowątkowy, wieloprocesowy serwer WWWA teraz do różnicy między
prefork
aworker
.prefork
MPMW
worker
MPM narzędzia hybrydowy wieloprocesowa wielowątkowy serwer i daje lepsze wyniki, a więc powinny być korzystne, jeżeli nie stosuje się innych modułów, które zawierają biblioteki nie bezpieczny wątku (patrz również dyskusję czy to na ServerFault).źródło
Spójrz na to, aby uzyskać więcej szczegółów. Odnosi się do tego, jak Apache obsługuje wiele żądań. Preforking, który jest domyślny, uruchamia pewną liczbę procesów Apache (domyślnie 2 tutaj, chociaż uważam, że można to skonfigurować przez httpd.conf). Worker MPM uruchomi nowy wątek na żądanie, co, jak sądzę, jest bardziej wydajne pod względem pamięci. Historycznie Apache używał preforków, więc jest to lepiej przetestowany model. Wątkowanie zostało dodane tylko w 2.0.
źródło
W przypadku CentOS 6.x i 7.x (w tym Amazon Linux) użyj:
To pokaże, które z MPM są skonfigurowane. Albo prefork, pracownik lub wydarzenie. Prefork jest wcześniejszym, bezpiecznym wątkowo modelem. Worker jest wielowątkowy, a zdarzenie obsługuje php-mpm, co ma być lepszym systemem do obsługi wątków i żądań.
Jednak wyniki mogą się różnić w zależności od konfiguracji. Widziałem wiele niestabilności w php-mpm i żadnych ulepszeń szybkości. Agresywny pająk może dość łatwo wyczerpać maksymalne procesy potomne w php-mpm.
Ustawienie prefork, worker lub event jest ustawiane w sudo nano /etc/httpd/conf.modules.d/00-mpm.conf (dla CentOS 6.x / 7.x / Apache 2.4).
źródło
Możesz sprawdzić, czy Apache używa preform, czy pracownika, wydając następujące polecenie
W wynikowym wyniku poszukaj wzmianek o prefork.c lub worker.c
źródło
apachectl -V
spojrzeć na wyjście obokServer MPM
. Może również sprawdzićps aux
i poszukać albohttpd
lubhttpd.worker
.apache2ctl -l
nie zadziałało; musiał użyćapachectl -l
.httpd -V
da coś takiego:Server MPM: worker
Łatwo jest przełączać się między mpm prefork lub roboczym w Apache 2.4 na RHEL7
Sprawdź typ MPM, wykonując
Teraz, aby zmienić MPM, edytuj następujący plik i odkomentuj wymagany MPM
źródło
Apache ma zdefiniowane 2 typy MPM (Multi-Processing Modules):
1: Prefork 2: Pracownik
Domyślnie Apacke jest skonfigurowany w trybie preforked, tj. Bez wątku pre-forking web server. Oznacza to, że każdy proces potomny Apache zawiera pojedynczy wątek i jednocześnie obsługuje jedno żądanie. Z tego powodu zużywa więcej zasobów.
Apache posiada również Worker MPM, który zamienia Apache w wieloprocesowy, wielowątkowy serwer WWW. Worker MPM używa wielu procesów potomnych, z których każdy ma wiele wątków.
źródło