Apache Prefork vs travailleur MPM

en regardant le fichier de configuration Apache, je vois Prefork et Worker MPM définis. Quelle est la différence et laquelle est utilisée par Apache?

107
demandé sur Cory 2012-12-14 21:38:24

6 réponses

Prefork et worker sont deux types de MPM qu'apache fournit. Tous deux ont leurs mérites et leurs limites.

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 des processus enfants multiples avec de nombreux fils chacun. Chaque fil gère une connexion à la fois.

pour plus 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

108
répondu Arvind 2017-03-30 19:46:35

les Modules multi-processeurs (MPMs) D'Apache sont responsables de la connexion aux ports réseau de la machine, de l'acceptation des requêtes et de l'envoi des enfants pour traiter les requêtes ( http://httpd.apache.org/docs/2.2/mpm.html ).

ils sont comme n'importe quel autre module Apache, sauf que juste un seul MPM doit être chargé dans le serveur à tout moment . Les MPM sont choisis configuration et compilé dans le serveur en utilisant l'argument --with-mpm=NAME avec le script de configuration où NAME est le nom du MPM désiré.

Apache utilisera un MPM par défaut pour chaque système d'exploitation à moins qu'un autre ne soit choisi lors de la compilation (par exemple sur Windows mpm_winnt est utilisé par défaut). Voici la liste des systèmes d'exploitation et de leurs MPM par défaut:

pour vérifier ce que les modules sont compilés dans le serveur en utilisant l'option de commande -l ( ici 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

depuis la version 2.2 ceci est la liste des caractéristiques de base disponibles et des modules MPM :

  • core - principales fonctionnalités du serveur HTTP Apache qui sont toujours disponibles
  • mpm_common - un ensemble de directives qui sont mises en œuvre par Plus d'un module Multi-traitement (MPM)
  • beos - ce Module Multi-Processing est optimisé pour les BeOS.
  • event - une variante expérimentale du MPM ouvrier standard
  • mpm_netware Module Multi-processus de mise en œuvre exclusivement filetée serveur web optimisé pour Novell NetWare
  • mpmt_os2 Hybride multi-processus multi-thread MPM pour OS/2
  • prefork met en œuvre un non filetée, avant de bifurquer serveur web
  • mpm_winnt - ce Module Multi-Processing est optimisé pour Windows NT.
  • worker - Module Multi-processus de mise en œuvre d'un hybride multi-thread multi-processus serveur web

Maintenant, la différence entre prefork et worker .

The prefork MPM

implémente un serveur web pré-forké sans fil qui gère requêtes d'une manière similaire à Apache 1.3. Il est approprié pour sites qui doivent éviter de fileter pour la compatibilité avec bibliothèques non-thread-safe. Il est également le meilleur MPM pour isoler chaque demande, de sorte qu'un problème avec une seule requête n'aura aucune incidence sur autre.

le worker MPM implémente un serveur multi-processus multi-threadé hybride et donne une meilleure performance, il devrait donc être préféré à moins que l'on utilise d'autres modules qui contiennent des bibliothèques non-thread-safe (voir aussi this discussion or this on Serverfault).

18
répondu user2314737 2017-04-13 12:13:35

regardez ce pour plus de détails. Il fait référence à 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 le configurer via httpd).conf). Worker MPM va lancer un nouveau thread par requête, ce qui, je pense, est plus efficace en termes de mémoire. Historiquement, Apache a utilisé prefork, c'est donc un modèle mieux testé. Le filetage n'a été ajouté qu'en 2.0.

8
répondu hd1 2017-04-13 12:13:38

Pour CentOS 6.x et 7.x (y compris Amazon Linux) utiliser:

sudo httpd -V

cela vous montrera quels MPMs sont configurés. Prefork, worker, ou event. Prefork est le premier, threadsafe modèle. Worker est multi-threadé, et event supporte 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 pas toutes les améliorations de la vitesse. Une araignée agressive peut facilement épuiser les processus enfants maximums en php-mpm.

le réglage pour prefork, worker, ou event est défini dans sudo nano /etc/httpd/conf.module.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
4
répondu jeffmcneill 2017-08-01 04:12:43

vous pouvez dire si Apache utilise preform ou worker en émettant la commande suivante

apache2ctl -l

dans la sortie résultante, recherchez les mentions de prefork.c ou de travailleur.c

3
répondu Rimu Atkinson 2014-06-05 04:59:13

il est facile de basculer entre les prefork ou mpm worker dans Apache 2.4 sur RHEL7

Vérifier le type de MPM en exécutant

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"

maintenant, pour changer MPM modifier le fichier suivant et de décommenter MPM requis

 /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
1
répondu Harsimranjit Singh Kler 2018-03-09 13:46:38