Comment savoir si apache fonctionne en tant que prefork ou worker?

40

Comment savoir si apache est exécuté (ou configuré pour fonctionner) en tant que préfork ou worker?


la source
2
ou plus techniquement 'compilé pour fonctionner comme'

Réponses:

37

Le MPM est configuré à la compilation. Une façon de le comprendre après est de lister les modules. Cette liste inclura le MPM choisi. La liste peut être accomplie en exécutant le binaire apache, avec le drapeau -l.

andreas@halleck:~$ apache2 -l
Compiled in modules:
 core.c
 mod_log_config.c
 mod_logio.c
 worker.c
 http_core.c
 mod_so.c
andreas@halleck:~$ 

Nous trouvons ici le module worker.c, d’où le logiciel worker MPM.

andol
la source
4
Cette réponse est fausse. Voir ma réponse.
Chris Johnson
1
Hm, sur Ubuntu, je n'ai ni ouvrier ni prépuce énumérés quand je fais cela ...
mlissner
2
Sur Ubuntu, vous pouvez utiliser apache2ctl -Mpour répertorier les modules actifs.
SteffenNielsen
53

Les réponses données par Series8217 et Andol sont toutes les deux incorrectes.

La question était de savoir comment savoir si Apache exécutait prefork ou worker. Les conseils donnés par les autres réponses indiquent uniquement ce qu'est le MPM par défaut (basé sur des modules intégrés), et non si ce choix par défaut ou un autre choix est utilisé à l'heure actuelle.

Si httpd -Vaffiche prefork, cela signifie simplement que prefork est le MPM par défaut compilé. Cela peut être annulé en modifiant un paramètre de fichier de configuration Apache, comme indiqué dans ce processus:

  1. Editer le fichier de configuration (par exemple /etc/sysconfig/httpdsur CentOS / RedHat)
  2. Ajoutez ou décommentez cette ligne: HTTPD=/usr/sbin/httpd.worker
  3. Redémarrer Apache

Ce MPM en cours d'exécution peut être montré en utilisant ce processus:

  1. Activer Apache mod_info
  2. Interroger l'URL mod_info, généralement curl localhost/server-info
  3. La section "Paramètres du serveur" affichera "Nom MPM: Travailleur"
  4. Exécutez à httpd -Vnouveau - il affichera toujours prefork, pas travailleur

Ligne de fond:

  • httpd -V affiche l'option par défaut, pas celle qui est réellement utilisée

Il y a des réponses sur beaucoup, beaucoup de sites Web disant, utilisez httpd -Vpour dire si Apache exécute prefork ou worker. Ils ont tous tort. Essayez la procédure ci-dessus pour voir par vous-même.

Chris Johnson
la source
Pour votre information, selon httpd.apache.org/docs/trunk/mpm.html, le MPM peut être un module statique sur toutes les plates-formes ou construit sous la forme d'un DSO (sous Unix). Lorsqu'il est construit en tant que module statique, "le serveur doit être reconstruit afin de changer le MPM". La documentation d'Apache est-elle incorrecte en ce qui concerne le module statique MPM étant non modifiable sauf en reconstruisant le serveur?
Steven T. Snyder
Cela ressemble beaucoup à quelque chose de spécifique à la distribution, avec un wrapper de plus haut niveau?
andol
2
Sur CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event et /usr/sbin/httpd.worker sont tous des fichiers binaires distincts avec différents MPM configurés au moment de la compilation (respectivement prefork, event et worker). Changer le réglage de HTTPD dans / etc / sysconfig / httpd ne fait que contrôler quel binaire est exécuté par le script init.
Paul Haldane
Je devais exécuter apache2 -V au lieu de httpd -V sur Ubuntu 16.04 LTS
cnizzardini
41

Dans Ubuntu 14.04

a2query -M

Raconte event, prefork,worker

Vous pouvez le changer en ajoutant des liens symboliques pour mpm_<chosen>de mods-availableà mods-enableddans /etc/apache2.

Un seul est autorisé à la fois.

JorgeeFG
la source
2
Cela doit être la réponse acceptée.
oui, bonne réponse! simple et renvoie ce qui est nécessaire
Flash Thunder
Travaillé pour moi le meilleur, merci (travaillé sur Apache 2.4 .... semble que cela ne fonctionne pas sur Apache 2.2)
dmikam
Le eventMPM est, selon le site d'Apache «une variante du travailleur dans le but MPM de la consommation de threads que pour les connexions avec le traitement actif ».
Jonathan Berger
7

Sur RedHat et ses dérivés, lancez simplement topou ps auxregardez le nom du processus httpd:

  • httpd signifie qu'Apache fonctionne en tant que prefork
  • httpd.worker signifie qu'il fonctionne en tant que travailleur
Corrado Fiore
la source
4

Sous RHEL / Fedora / etc, exécutez httpd -V. Vous obtiendrez une sortie comprenant les éléments suivants:

Server version: Apache/2.2.21 (Unix)
     ...
Architecture:   64-bit
Server MPM:     Prefork
     ...

Ici, 'Serveur MPM' est 'Prefork', mon serveur exécute donc le préfork MPM.

Steven T. Snyder
la source
Cette réponse est fausse. Voir ma réponse.
Chris Johnson
@ChrisJohnson, découverte intéressante ... J'ai cru comprendre que le MPM ne pouvait pas être modifié par la configuration, mais uniquement par la compilation. Il semble que le PO pensait la même chose, puisqu'il a commenté sa question avec "ou plus techniquement" compilé pour fonctionner comme "". Je regarderai dans la reproduction de votre réponse et une fois que je l'aurai confirmée, je révoquerai la mienne.
Steven T. Snyder
J'ai confirmé dans la documentation d'Apache à httpd.apache.org/docs/trunk/mpm.html que les MPM peuvent être générés en tant que modules DSO et chargés dynamiquement avec la directive LoadModule, sur "Unix et des plates-formes similaires". Donc, le MPM peut en effet être changé au moment du chargement dans certaines circonstances (ce qui pourrait être la configuration la plus courante de nos jours ..)
Steven T. Snyder
4

Chris Johnson a raison. Allez sur httpd.conf => ajoutez cette ligne:

<Location /server-info>
SetHandler server-info
</Location>

Redémarrez apache: /etc/init.d/httpd restart. Accédez ensuite à localhost / server-info par votre navigateur et consultez la section MPM Name .

songpham
la source
Encore plus sympa, mettez ça entre <IfModule info_module> </ IfModule>
Lexib0y
3

Voici une autre méthode qui, selon moi, devrait être fiable pour déterminer quel MPM est utilisé. Ajoutez ce qui suit à votre httpd.conf:

<IfModule prefork.c>
    Header append X-MPM prefork
</IfModule>
<IfModule worker.c>
    Header append X-MPM worker
</IfModule>

Puis vérifiez les en-têtes avec curl -I localhost | grep X-MPM.

Quinn Comendant
la source
3

sur centos (ou rhel), vous pouvez exécuter cette commande:

ps -ef | grep httpd

si vous voyez en /usr/sbin/httpd.workercours d'exécution, il utilise alors le MPM travailleur. si vous voyez /usr/sbin/httpdcourir, alors il utilise prefork

James Turner
la source
2

La réponse de Chris Johnson est juste.

Après avoir activé le module info, comme indiqué dans la documentation Apache ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ), ce dernier vous donnera le MPM que vous utilisez:

links -dump http://localhost/server-info/?server | grep "MPM Name"
Manu
la source
2

Une façon de comprendre cela dans Debian, comme les distributions, est de courir:

apachectl -V | grep -i mpm
Hex
la source