En regardant le fichier de configuration Apache, je vois Prefork et Worker MPM définis. Quelle est la différence et laquelle utilise Apache?
113
Prefork et worker sont deux types de MPM fournis par Apache. Les deux ont leurs mérites et leurs inconvénients.
Par défaut, mpm est prefork qui est thread-safe.
Prefork MPM utilise plusieurs processus enfants avec un thread chacun et chaque processus gère une connexion à la fois.
Worker MPM utilise plusieurs processus enfants avec chacun de nombreux threads. Chaque thread gère une connexion à la fois.
Pour plus de détails, vous pouvez visiter https://httpd.apache.org/docs/2.4/mpm.html et https://httpd.apache.org/docs/2.4/mod/prefork.html
Les modules multi-traitements (MPM) d'Apache sont responsables de la liaison aux ports réseau de la machine, de l'acceptation des requêtes et de l'envoi des enfants pour gérer les requêtes ( http://httpd.apache.org/docs/2.2/mpm.html ).
Ils sont comme n'importe quel autre module Apache, sauf qu'un seul et un seul MPM doit être chargé sur le serveur à tout moment . Les MPM sont choisis lors de la configuration et compilés dans le serveur en utilisant l'argument
--with-mpm=NAME
avec le script configure oùNAME
est le nom du MPM souhaité.Apache utilisera un MPM par défaut pour chaque système d'exploitation à moins qu'un autre ne soit choisi au moment de la compilation (par exemple sous Windows
mpm_winnt
est utilisé par défaut). Voici la liste des systèmes d'exploitation et de leurs MPM par défaut:beos
mpm_netware
mpmt_os2
prefork
( mise à jour pour la version Apache ≥ 2.4 :prefork
,worker
ouevent
, selon les capacités de la plate - forme)mpm_winnt
Pour vérifier quels modules sont compilés dans le serveur, utilisez l'option de ligne de commande
-l
( voici la documentation). Par exemple, sur une installation Windows, vous pourriez obtenir quelque chose comme:À partir de la version 2.2, voici la liste des fonctionnalités principales et des modules MPM disponibles :
core
- Fonctionnalités principales du serveur HTTP Apache toujours disponiblesmpm_common
- Un ensemble de directives implémentées par plus d'un module multi-traitement (MPM)beos
- Ce module multi-traitement est optimisé pour BeOS.event
- Une variante expérimentale du MPM standard workermpm_netware
Module multi-traitement implémentant un serveur Web exclusivement threadé optimisé pour Novell NetWarempmt_os2
MPM hybride multi-processus et multi-thread pour OS / 2prefork
Implémente un serveur Web pré-forking non threadémpm_winnt
- Ce module multi-traitement est optimisé pour Windows NT.worker
- Module multi-traitement implémentant un serveur web multi-processus hybride multi-threadMaintenant, à la différence entre
prefork
etworker
.Le
prefork
MPMLe
worker
MPM implémente un serveur multi-thread multi-thread hybride et donne de meilleures performances, il devrait donc être préférable à moins que l'on utilise d'autres modules qui contiennent des bibliothèques non thread-safe (voir aussi cette discussion ou ceci sur Serverfault).la source
Jetez un œil à ceci pour plus de détails. Il fait référence à la manière dont Apache gère plusieurs requêtes. Preforking, qui est la valeur par défaut, démarre un certain nombre de processus Apache (2 par défaut ici, bien que je pense que l'on puisse configurer cela via httpd.conf). Worker MPM lancera un nouveau thread par requête, ce qui, je suppose, est plus efficace en mémoire. Historiquement, Apache a utilisé prefork, c'est donc un modèle mieux testé. Le filetage n'a été ajouté que dans la version 2.0.
la source
Pour CentOS 6.x et 7.x (y compris Amazon Linux), utilisez:
Cela vous montrera lesquels des MPM sont configurés. Soit prefork, worker ou event. Prefork est le premier modèle threadsafe. Worker est multi-thread, et l'événement prend en charge php-mpm qui est censé être un meilleur système pour gérer les threads et les requêtes.
Cependant, vos résultats peuvent varier en fonction de la configuration. J'ai vu beaucoup d'instabilité dans php-mpm et aucune amélioration de la vitesse. Une araignée agressive peut épuiser assez facilement le maximum de processus enfants dans php-mpm.
Le paramètre pour prefork, worker ou event est défini dans sudo nano /etc/httpd/conf.modules.d/00-mpm.conf (pour CentOS 6.x / 7.x / Apache 2.4).
la source
Vous pouvez savoir si Apache utilise préforme ou worker en exécutant la commande suivante
Dans la sortie résultante, recherchez les mentions de prefork.c ou worker.c
la source
apachectl -V
regarder la sortie à côté deServer MPM
. Peut également vérifierps aux
et rechercher soithttpd
ouhttpd.worker
.apache2ctl -l
n'a pas fonctionné; dû utiliserapachectl -l
.httpd -V
donnera quelque chose comme:Server MPM: worker
Il est facile de basculer entre Prefork ou Worker mpm dans Apache 2.4 sur RHEL7
Vérifiez le type MPM en exécutant
Maintenant, pour changer MPM, éditez le fichier suivant et décommentez MPM requis
la source
Apache a 2 types de MPM (Multi-Processing Modules) définis:
1: Prefork 2: Travailleur
Par défaut, Apacke est configuré en mode préforké, c'est-à-dire un serveur Web pré-forking non threadé. Cela signifie que chaque processus enfant Apache contient un seul thread et gère une requête à la fois. À cause de cela, il consomme plus de ressources.
Apache possède également le MPM de travail qui transforme Apache en un serveur Web multi-processus et multi-thread. Worker MPM utilise plusieurs processus enfants avec chacun de nombreux threads.
la source