Article ID: 113007, created on Mar 12, 2014, last review on Apr 16, 2015

  • Applies to:
  • Plesk 12.0 for Linux

Résolution

Prefork :

Le MPM Prefork utilise de nombreux processus enfants avec chacun un thread. Chaque processus traite une seule connexion à la fois. Sur de nombreux systèmes, Prefork et Worker sont comparables en termes de vitesse. Toutefois, Prefork consomme davantage de mémoire. Le MPM Prefork étant non orienté thread, il dispose de plusieurs avantages comparé au MPM Worker dans certaines situations : il peut être utilisé avec des modules tiers non-thread-safe et il est plus simple à déboguer sur des plates-formes avec une prise en charge de thread faible.

Avantages :

  • Développé sous Apache 1    
  • Processus enfants multiples, 1 thread par processus enfant, les processus enfants traitent les requêtes    
  • Meilleure isolation et stabilité    
  • Testé pour fonctionner avec Plesk

Inconvénients :

  • Consommation de mémoire accrue et performances diminuées pour les MPM avec thread

Worker :

Le MPM Worker utilise plusieurs processus enfants avec plusieurs threads chacun. Chaque thread traite une connexion à la fois. Un MPM Worker est en général un choix approprié pour les serveurs avec un trafic élevé, car son volume de mémoire est inférieur à celui d'un MPM Prefork.

Avantages :

  • Développé dans Apache 2 en plus du module Prefork

  • Plusieurs processus, de nombreux threads par processus, les threads traitent les requêtes

  • Moins de consommation de mémoire et performances plus élevées

Inconvénients :

  • Ne fournit pas le même niveau d'isolation "request-to-request" qu'un MPM basé sur des processus

  • Si un thread unique est suspendu / hors contrôle, le processus complet sera terminé, affectant par conséquent tous les threads

  • Requiert un processeur thread-safe pour traiter un contenu dynamique

  • Non pris en charge par Plesk

    Chaque module comporte un ensemble de directives de configuration différent dans le fichier de configuration du serveur Web Apache :

Prefork :

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild 4000
</IfModule>

Worker :

<IfModule worker.c>
 StartServers         2
 MaxClients         150
 MinSpareThreads     25
 MaxSpareThreads     75
 ThreadsPerChild     25
 MaxRequestsPerChild  0
 </IfModule>

Informations :

Dans les distributions Linux basées sur Red Hat, le serveur Web Apache est configuré pour être exécuté avec le module Prefork par défaut. D'un point de vue technique, vous pourriez switcher vers un MPM "Worker", si vous décidez que cela répond davantage à vos besoins. Notez toutefois l'avertissement ci-dessous.

Avertissement : Plesk n'a pas été testé avec le MPM Worker Apache. L'installer sur Debian/Ubuntu peut entraîner la suppression du pack psa.

Si vous souhaitez toujours switcher vers le module worker il suffit de ne pas décommenter cette directive dans le fichier /etc/sysconfig/httpd :

# grep HTTPD= /etc/sysconfig/httpd
#HTTPD=/usr/sbin/httpd.worker

Redémarrez Apache :

# /etc/init.d/httpd restart

Remarque : le MPM Worker part du principe qu'un module PHP spécial doit être configuré / chargé par le serveur Web Apache :

# cat /etc/httpd/conf.d/php.conf|grep -A3 "worker.c"
<IfModule worker.c>
 LoadModule php5_module modules/libphp5-zts.so
</IfModule>

Au final, les clients et ingénieurs posent souvent la question suivante : comment déterminer sur quel module MPM le serveur est exécuté ?

D'abord, utilisez l'utilitaire ps pour déterminer la ligne de commande d'un processus Apache exécuté :

 # ps aux | grep -v grep | egrep "apache|httpd"
 root      1684  0.0  1.4 284484 14888 ?        Ss   17:52   0:00 /usr/sbin/httpd
 apache    3101  0.0  0.7 284484  7596 ?        S    18:02   0:00 /usr/sbin/httpd 

Puis, vérifiez quel module est exécuté à l'aide de cette commande :

 # /usr/sbin/httpd -l | egrep "prefork|worker" 

Vous pouvez également utiliser le fichier de configuration /etc/sysconfig/httpd :

 # grep -B 5 HTTPD= /etc/sysconfig/httpd
 # The default processing model (MPM) is the process-based
 # "prefork" model. A thread-based model, "worker," is also
 # available, but does not work with some modules (such as PHP).
 # The service must be stopped before changing this variable.
 #
 #HTTPD=/usr/sbin/httpd.worker 

Infos supplémentaires

MPM Prefork Apache

MPM Worker Apache

a914db3fdc7a53ddcfd1b2db8f5a1b9c 29d1e90fd304f01e6420fbe60f66f838 56797cefb1efc9130f7c48a7d1db0f0c 2a5151f57629129e26ff206d171fbb5f e335d9adf7edffca6a8af8039031a4c7

Email subscription for changes to this article
Save as PDF