Frage Wie kann ich feststellen, ob Apache als Prefork oder Worker ausgeführt wird?


Wie kann ich feststellen, ob Apache als Prefork oder Worker ausgeführt wird (oder für die Ausführung konfiguriert ist)?


39
2017-11-24 23:47


Ursprung


oder technisch "kompiliert um zu laufen als"


Antworten:


Das MPM wird zur Kompilierzeit konfiguriert. Eine Möglichkeit, es später herauszufinden, besteht darin, kompilierte Module aufzulisten. Diese Liste enthält das gewählte MPM. Die Auflistung kann ausgeführt werden, indem die Apache-Binärdatei mit dem Flag -l ausgeführt wird.

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:~$ 

Hier finden wir das Modul worker.c, daher führe ich das worker MPM aus.


35
2017-11-24 23:56



Diese Antwort ist falsch. Siehe meine Antwort. - Chris Johnson
Hm, auf Ubuntu habe ich weder Worker noch Prefork aufgelistet, wenn ich das mache ... - mlissner
Unter Ubuntu können Sie verwenden apache2ctl -M um aktive Module aufzulisten. - SteffenNielsen


Die Antworten von Series8217 und Andol sind beide falsch.

Die Frage war, wie man weiß, ob Apache ist Laufen Prefork oder Arbeiter. Der Rat der anderen Antworten sagt nur, was Standard MPM ist (basierend auf einkompilierten Modulen) nicht, wenn dieser Standard oder eine andere Wahl zur Zeit verwendet wird.

Ob httpd -V zeigt Prefork, das bedeutet Prefork ist das kompilierte Standard-MPM. Dies kann außer Kraft gesetzt werden, indem Sie eine Apache-Konfigurationsdatei ändern, wie in diesem Prozess gezeigt:

  1. Bearbeiten Sie die Konfigurationsdatei (z. /etc/sysconfig/httpd auf CentOS / RedHat)
  2. Ergänzen oder entfernen Sie diese Zeile: HTTPD=/usr/sbin/httpd.worker
  3. Starten Sie Apache neu

Welches MPM tatsächlich ausgeführt wird, kann mit diesem Prozess angezeigt werden:

  1. Aktiviere Apache mod_info
  2. Fragen Sie in der Regel die URL mod_info ab curl localhost/server-info
  3. Der Abschnitt "Servereinstellungen" zeigt "MPM-Name: Worker"
  4. Lauf httpd -V wieder - es wird immer noch prefork, nicht worker angezeigt

Endeffekt:

  • httpd -V zeigt die Standardoption an, nicht welche Option tatsächlich verwendet wird

Es gibt Antworten auf viele, viele Webseiten, die sagen, verwenden httpd -V um festzustellen, ob Apache Prefork oder Worker ausführt. Sie sind alle falsch. Probieren Sie das obige Verfahren aus, um es selbst zu sehen.


51
2018-03-16 11:55



FYI, nach httpd.apache.org/docs/trunk/mpm.html Das MPM kann ein statisches Modul auf allen Plattformen sein oder als DSO (unter Unix) gebaut sein. Wenn es als statisches Modul erstellt wird, muss der Server neu erstellt werden, um das MPM zu ändern. Ist die Apache-Dokumentation falsch, wenn das statische Modul MPM nicht geändert werden kann, außer durch Neuaufbau des Servers? - Steven T. Snyder
Das klingt sehr nach etwas Distro-spezifischem, mit einem Wrapper auf höherer Ebene? - andol
Auf CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event und /usr/sbin/httpd.worker sind alle verschiedene Binaries mit unterschiedlichen MPM konfiguriert (Prefork, Event und Worker). Das Ändern der Einstellung von HTTPD in / etc / sysconfig / httpd steuert nur, welche Binärdatei vom Init-Skript ausgeführt wird. - Paul Haldane
Ich musste Apache2 -V anstelle von httpd -V auf Ubuntu 16.04 LTS laufen lassen - cnizzardini


In Ubuntu 14.04

a2query -M

Erzählt event, prefork, worker

Sie können es ändern, indem Sie symbolische Links für hinzufügen mpm_<chosen> von mods-available zu mods-enabled im /etc/apache2.

Nur einer ist in einer Zeit erlaubt.


34
2018-01-31 01:48



Dies muss die akzeptierte Antwort sein.
Ja, tolle Antwort! einfach und gibt zurück, was benötigt wird - Flash Thunder


Auf RedHat und Derivaten starten Sie einfach top oder ps aux und sehen Sie sich den httpd-Prozessnamen an:

  • httpd bedeutet, Apache läuft als Prefork
  • httpd.worker bedeutet, dass es als Arbeiter läuft

6
2017-07-29 01:22





Chris Johnson hat Recht. Gehe zu httpd.conf => füge diese Zeile hinzu:

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

Starten Sie Apache neu: /etc/init.d/httpd neustarten. Dann Zugriff localhost / server-info von Ihrem Browser und schau dir MPM Name an.


4
2017-08-20 00:30



Noch schöner ist das zwischen <IfModule info_module> </ IfModule> - Lexib0y


Auf RHEL / Fedora / etc, ausführen httpd -V. Sie erhalten eine Ausgabe, die Folgendes enthält:

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

Hier ist "Server MPM" "Prefork", also läuft auf meinem Server das Prefork MPM.


3
2017-12-28 17:57



Diese Antwort ist falsch. Siehe meine Antwort. - Chris Johnson
@ChrisJohnson, interessante Entdeckung ... Mein Verständnis war, dass das MPM nicht durch Konfiguration geändert werden konnte, nur durch Kompilierung. Es scheint, dass der OP das gleiche dachte, da er seine Frage mit "oder mehr technisch" kompiliert, um als '' zu laufen. Ich werde versuchen, deine Antwort zu reproduzieren, und sobald ich es bestätigt habe, werde ich meine widerrufen. - Steven T. Snyder
Das habe ich über die Apache-Dokumentation bestätigt httpd.apache.org/docs/trunk/mpm.html Diese MPMs können als DSO-Module erstellt und dynamisch mit der LoadModule-Direktive auf "Unix und ähnliche Plattformen" geladen werden. So kann das MPM unter bestimmten Umständen tatsächlich geändert werden (was heutzutage die am häufigsten verwendete Konfiguration ist). - Steven T. Snyder


Die Antwort von Chris Johnson ist richtig.

Nach Aktivierung des Info-Moduls, wie in der Apache-Dokumentation dokumentiert (http://httpd.apache.org/docs/2.2/mod/mod_info.html), dieser eine Liner gibt Ihnen die MPM, die Sie verwenden:

links -dump http://localhost/server-info/?server | grep "MPM Name"

2
2017-09-06 11:04





Hier ist eine andere Methode, von der ich erwarte, dass sie zuverlässig sein sollte, um festzustellen, welches MPM verwendet wird. Fügen Sie Ihrem httpd.conf:

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

Dann überprüfen Sie die Header mit curl -I localhost | grep X-MPM.


2
2017-10-25 23:37





Auf Centos (oder Rhel) können Sie diesen Befehl ausführen:

ps -ef | grep httpd

wenn du siehst /usr/sbin/httpd.workerläuft, dann verwendet es das Worker-MPM. wenn du siehst /usr/sbin/httpd läuft, dann benutzt es Prefork


2
2017-10-03 20:21





Eine Möglichkeit, wie ich es in Debian wie Distributionen finde, ist das Ausführen von:

apachectl -V | grep -i mpm

2
2017-12-02 00:50