En regardant le fichier de configuration d'Apache, je vois que Prefork et Worker MPM sont définis. Quelle est la différence et lequel Apache utilise-t-il ?
Voir aussi "Comment choisir le MPM Apache à utiliser ?". serverfault.com/a/383634
En regardant le fichier de configuration d'Apache, je vois que Prefork et Worker MPM sont définis. Quelle est la différence et lequel Apache utilise-t-il ?
Prefork et worker sont deux types de MPM fournis par Apache. Les deux ont leurs mérites et leurs démérites.
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 de nombreux threads chacun. 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 y https://httpd.apache.org/docs/2.4/mod/prefork.html
Les modules multiprocesseurs (MPM) d'Apache sont chargés de se lier aux ports réseau de la machine, d'accepter les demandes et de répartir les enfants pour traiter les demandes ( http://httpd.apache.org/docs/2.2/mpm.html ).
Ils sont comme n'importe quel autre module Apache, sauf que juste un et un seul MPM doit être chargé dans le serveur à tout moment. . Les MPM sont choisis lors de la configuration et compilé dans le serveur en utilisant l'argument --with-mpm=NAME
avec la commande configure script où NAME
est le nom du MPM souhaité.
Apache utilisera un MPM par défaut pour chaque système d'exploitation à moins qu'un MPM différent ne soit choisi à la compilation (par exemple sous Windows mpm_winnt
est utilisé par défaut). Voici la liste des systèmes d'exploitation et de leurs MPMs par défaut :
beos
mpm_netware
mpmt_os2
prefork
( mise à jour pour Apache version 2.4 : prefork
, worker
ou event
(en fonction des capacités de la plate-forme)mpm_winnt
Pour vérifier quels modules sont compilés dans le serveur, utilisez l'option de la ligne de commande -l
( aquí est la documentation). Par exemple, sur une installation Windows, vous pourriez obtenir quelque chose comme :
> httpd -l
Compiled in modules:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c
À partir de la version 2.2, c'est le liste des fonctions de base et des modules MPM disponibles :
core
- Fonctions de base du serveur HTTP Apache qui sont toujours disponiblesmpm_common
- Une collection de directives qui sont mises en œuvre par plus d'un module multiprocesseur (MPM).beos
- Ce module multiprocesseur est optimisé pour BeOS.event
- Une variante expérimentale de l'ouvrier standard MPMmpm_netware
Module multiprocesseur mettant en œuvre un serveur web exclusivement threadé optimisé pour Novell NetWarempmt_os2
MPM hybride multi-processus et multi-fil pour OS/2prefork
Implémente un serveur web non threadé et pré-forking.mpm_winnt
- Ce module multiprocesseur est optimisé pour Windows NT.worker
- Module de multitraitement mettant en œuvre un serveur web hybride multitraitement et multithread.Maintenant, la différence entre prefork
y worker
.
El prefork
MPM
implémente un serveur web non threadé, pré-forking qui traite les d'une manière similaire à Apache 1.3. Il est approprié pour sites qui ont besoin d'éviter le threading pour des raisons de compatibilité avec bibliothèques non threadées. Il s'agit également du meilleur MPM pour isoler chaque requête, de sorte que le problème d'une seule requête n'affecte pas les autres. autres.
El worker
MPM implémente un serveur hybride multi-processus multi-fil et donne de meilleures performances, il devrait donc être préféré à moins que l'on utilise d'autres modules qui contiennent des bibliothèques non threadées (voir aussi cette discussion o este sur Serverfault).
Jetez un coup d'œil à este pour plus de détails. Il s'agit de la façon dont Apache gère les requêtes multiples. 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 démarre un nouveau thread par requête, ce qui, je pense, est plus efficace en termes de mémoire. Historiquement, Apache a utilisé prefork, donc c'est un modèle mieux testé. Le threading n'a été ajouté qu'en 2.0.
Pour CentOS 6.x et 7.x (y compris Amazon Linux), utilisez :
sudo httpd -V
Cela vous montrera quels MPM sont configurés. Soit prefork, worker, ou event. Prefork est le modèle précédent, threadsafe. Worker est multi-threadé, et event supporte php-mpm qui est supposé ê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 constaté beaucoup d'instabilité dans php-mpm et aucune amélioration de la vitesse. Un spider agressif peut épuiser le maximum de processus enfants dans php-mpm assez facilement.
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).
# 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 peut être compilé avec les deux modules MPM, ce qui n'est pas toujours fiable. S'il liste deux modules MPM, essayez apachectl -V
et regardez la sortie à côté de Server MPM
. Vous pouvez également vérifier ps aux
et cherchez soit httpd
o httpd.worker
.
Aucun d'entre eux n'est listé pour moi, pourtant apache fonctionne bien, Apache/2.4.7 (Ubuntu)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.