Wenn ich mir die Apache-Konfigurationsdatei ansehe, sehe ich, dass Prefork und Worker MPM definiert sind. Was ist der Unterschied und welches verwendet Apache?
113
Prefork und Worker sind zwei Arten von MPM-Apache. Beide haben ihre Vor- und Nachteile.
Standardmäßig ist mpm prefork, was threadsicher ist.
Prefork MPM verwendet mehrere untergeordnete Prozesse mit jeweils einem Thread, und jeder Prozess verarbeitet jeweils eine Verbindung.
Worker MPM verwendet mehrere untergeordnete Prozesse mit jeweils vielen Threads. Jeder Thread verarbeitet jeweils eine Verbindung.
Weitere Informationen finden Sie unter https://httpd.apache.org/docs/2.4/mpm.html und https://httpd.apache.org/docs/2.4/mod/prefork.html
Die Multi-Processing-Module (MPMs) von Apache sind für die Bindung an Netzwerkports auf dem Computer, das Akzeptieren von Anforderungen und das Versenden von untergeordneten Elementen zur Bearbeitung der Anforderungen verantwortlich ( http://httpd.apache.org/docs/2.2/mpm.html ).
Sie sind wie jedes andere Apache-Modul, außer dass immer nur ein MPM auf den Server geladen werden muss . MPMs werden während der Konfiguration ausgewählt und mithilfe des Arguments mit dem Konfigurationsskript, in dem der Name des gewünschten MPM angegeben ist , auf dem Server kompiliert .
--with-mpm=NAME
NAME
Apache verwendet für jedes Betriebssystem ein Standard-MPM, es sei denn, beim Kompilieren wird ein anderes ausgewählt (z. B. wird unter Windows
mpm_winnt
standardmäßig Windows verwendet). Hier ist die Liste der Betriebssysteme und ihrer Standard-MPMs:beos
mpm_netware
mpmt_os2
prefork
( Update für Apache - Version ≥ 2.4 :prefork
,worker
, oderevent
, je nach Plattform - Funktionen)mpm_winnt
Um zu überprüfen, welche Module auf dem Server kompiliert wurden, verwenden Sie die Befehlszeilenoption
-l
( hier ist die Dokumentation). Bei einer Windows-Installation erhalten Sie beispielsweise Folgendes:Ab Version 2.2 ist dies die Liste der verfügbaren Kernfunktionen und MPM-Module :
core
- Core Apache HTTP Server-Funktionen, die immer verfügbar sindmpm_common
- Eine Sammlung von Anweisungen, die von mehr als einem Multi-Processing-Modul (MPM) implementiert werden.beos
- Dieses Multi-Processing-Modul ist für BeOS optimiert.event
- Eine experimentelle Variante des Standard Worker MPMmpm_netware
Multi-Processing-Modul zur Implementierung eines exklusiven Thread-Webservers, der für Novell NetWare optimiert istmpmt_os2
Hybrides Multiprozess-MPM mit mehreren Threads für OS / 2prefork
Implementiert einen Webserver ohne Threading vor dem Gabelnmpm_winnt
- Dieses Multi-Processing-Modul ist für Windows NT optimiert.worker
- Multi-Processing-Modul zur Implementierung eines hybriden Multithread-Multiprozess-WebserversNun zum Unterschied zwischen
prefork
undworker
.Das
prefork
MPMDas
worker
MPM implementiert einen hybriden Multiprozess-Multithread-Server mit mehreren Prozessen und bietet eine bessere Leistung. Daher sollte dies bevorzugt werden, es sei denn, man verwendet andere Module, die nicht threadsichere Bibliotheken enthalten (siehe auch diese Diskussion oder diese zu Serverfault).quelle
Schauen Sie sich das für weitere Details an. Es bezieht sich darauf, wie Apache mehrere Anforderungen verarbeitet. Preforking, die Standardeinstellung, startet eine Reihe von Apache-Prozessen (hier standardmäßig 2, obwohl ich glaube, dass man dies über httpd.conf konfigurieren kann). Worker MPM startet pro Anfrage einen neuen Thread, was meiner Meinung nach speichereffizienter ist. In der Vergangenheit hat Apache Prefork verwendet, daher ist es ein besser getestetes Modell. Threading wurde nur in 2.0 hinzugefügt.
quelle
Verwenden Sie für CentOS 6.x und 7.x (einschließlich Amazon Linux):
Dies zeigt Ihnen, welche der MPMs konfiguriert sind. Entweder Prefork, Worker oder Event. Prefork ist das frühere, threadsichere Modell. Worker ist multithreaded und event unterstützt php-mpm, ein besseres System für die Verarbeitung von Threads und Anforderungen.
Ihre Ergebnisse können jedoch je nach Konfiguration variieren. Ich habe viel Instabilität in PHP-MPM gesehen und keine Geschwindigkeitsverbesserungen. Eine aggressive Spinne kann die maximalen untergeordneten Prozesse in PHP-MPM ziemlich leicht erschöpfen.
Die Einstellung für Prefork, Worker oder Event wird in sudo nano /etc/httpd/conf.modules.d/00-mpm.conf (für CentOS 6.x / 7.x / Apache 2.4) festgelegt.
quelle
Sie können feststellen, ob Apache Preform oder Worker verwendet, indem Sie den folgenden Befehl eingeben
Suchen Sie in der resultierenden Ausgabe nach Erwähnungen von prefork.c oder worker.c
quelle
apachectl -V
schauen Sie sich die Ausgabe neben anServer MPM
. Kann auchps aux
nachhttpd
oder suchenhttpd.worker
.apache2ctl -l
hat nicht funktioniert; musste verwendenapachectl -l
.httpd -V
wirdServer MPM: worker
In Apache 2.4 auf RHEL7 ist es einfach, zwischen Prefork- und Worker-MPM zu wechseln
Überprüfen Sie den MPM-Typ durch Ausführen
Um nun das MPM zu ändern, bearbeiten Sie die folgende Datei und kommentieren Sie das erforderliche MPM aus
quelle
In Apache sind zwei Arten von MPM (Multi-Processing Modules) definiert:
1: Prefork 2: Arbeiter
Standardmäßig ist Apacke im Prefork-Modus konfiguriert, dh im Pre-Forking-Webserver ohne Thread. Das bedeutet, dass jeder untergeordnete Apache-Prozess einen einzelnen Thread enthält und jeweils eine Anforderung verarbeitet. Aus diesem Grund verbraucht es mehr Ressourcen.
Apache verfügt auch über das Worker-MPM, das Apache in einen Webserver mit mehreren Prozessen und mehreren Threads verwandelt. Worker MPM verwendet mehrere untergeordnete Prozesse mit jeweils vielen Threads.
quelle