Jak sprawdzić, czy apache działa jako prefork czy robot?

40

Jak sprawdzić, czy apache działa (lub jest skonfigurowany do uruchamiania) jako prefork czy pracownik?


źródło
2
lub bardziej technicznie „skompilowany do działania jako”

Odpowiedzi:

37

MPM jest konfigurowany podczas kompilacji. Jednym ze sposobów, aby to później ustalić, jest lista skompilowana w modułach. Ta lista będzie zawierać wybrany MPM. Listowanie można osiągnąć, uruchamiając plik binarny apache za pomocą opcji -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:~$ 

Tutaj znajduje się moduł robotnik.c, dlatego uruchamiam robota MPM.

andol
źródło
4
Ta odpowiedź jest zła. Zobacz moją odpowiedź.
Chris Johnson
1
Hm, na Ubuntu nie mam ani pracownika ani prefabrykatów, kiedy to robię ...
mlissner,
2
W systemie Ubuntu możesz użyć apache2ctl -Mlisty aktywnych modułów.
SteffenNielsen
53

Odpowiedzi udzielone przez Series8217 i Andola są niepoprawne.

Pytanie brzmiało: jak stwierdzić, czy Apache korzysta z preforków, czy z procesów roboczych. Porada udzielona przez inne odpowiedzi mówi tylko, czym jest domyślny MPM (w oparciu o skompilowane moduły), a nie, jeśli obecnie używany jest ten domyślny lub inny wybór.

Jeśli httpd -Vpokazuje prefork, oznacza to po prostu, że prefork jest skompilowanym domyślnym MPM. Można to zmienić, zmieniając ustawienie pliku konfiguracyjnego Apache, jak pokazano w tym procesie:

  1. Edytuj plik konfiguracyjny (np. W /etc/sysconfig/httpdCentOS / RedHat)
  2. Dodaj lub odkomentuj ten wiersz: HTTPD=/usr/sbin/httpd.worker
  3. Uruchom ponownie Apache

Który MPM faktycznie działa, można pokazać za pomocą tego procesu:

  1. Włącz Apache mod_info
  2. Zazwyczaj pytaj o adres URL mod_info curl localhost/server-info
  3. W sekcji „Ustawienia serwera” pojawi się „Nazwa MPM: pracownik”
  4. Uruchom httpd -Vponownie - nadal będzie wyświetlać preforkę, a nie pracownika

Dolna linia:

  • httpd -V pokazuje domyślną opcję, a nie która opcja jest aktualnie używana

Odpowiedzi na wiele, wiele stron internetowych mówią, użyj, httpd -Vaby powiedzieć, czy Apache działa przed przygotowaniem czy robotem. Wszyscy się mylą. Wypróbuj powyższą procedurę, aby się przekonać.

Chris Johnson
źródło
FYI, zgodnie z httpd.apache.org/docs/trunk/mpm.html MPM może być modułem statycznym na wszystkich platformach lub zbudowanym jako DSO (na Uniksie). Gdy jest zbudowany jako moduł statyczny, „Serwer musi zostać przebudowany, aby zmienić MPM”. Czy dokumentacja Apache jest nieprawidłowa w odniesieniu do niezmienności modułu statycznego MPM, chyba że przebudowano serwer?
Steven T. Snyder
To brzmi jak coś specyficznego dla dystrybucji, z otaczającym poziomem wyższym?
andol
2
Na CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event i /usr/sbin/httpd.worker są różne pliki binarne z różnymi MPM skonfigurowanymi w czasie kompilacji (odpowiednio prefork, event i worker). Zmiana ustawienia HTTPD w / etc / sysconfig / httpd tylko kontroluje, który plik binarny jest uruchamiany przez skrypt init.
Paul Haldane
Musiałem uruchomić apache2 -V zamiast httpd -V na Ubuntu 16.04 LTS
cnizzardini
41

W Ubuntu 14.04

a2query -M

Informuje event, prefork,worker

Możesz to zmienić, dodając dowiązania symboliczne mpm_<chosen>od mods-availabledo do mods-enabledw /etc/apache2.

Tylko jeden jest dozwolony na raz.

JorgeeFG
źródło
2
To musi być zaakceptowana odpowiedź.
tak, świetna odpowiedź! proste i zwraca to, co jest potrzebne
Flash Thunder
Działa dla mnie najlepiej, dzięki (działało na Apache 2.4 .... wygląda na to, że nie działa na Apache 2.2)
dmikam
eventMPM jest według miejsca Apache „wariantu MPM pracownika z celem spożywania wątki tylko dla połączeń z aktywnego przetwarzania”.
Jonathan Berger
7

W RedHat i pochodnych po prostu uruchom toplub ps auxspójrz na nazwę procesu httpd:

  • httpd oznacza, że ​​Apache działa jako prefork
  • httpd.worker oznacza, że ​​działa jako pracownik
Corrado Fiore
źródło
4

Na RHEL / Fedora / etc uruchom httpd -V. Otrzymasz dane wyjściowe, które obejmują:

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

Tutaj „Server MPM” to „Prefork”, więc mój serwer uruchamia prefork MPM.

Steven T. Snyder
źródło
Ta odpowiedź jest zła. Zobacz moją odpowiedź.
Chris Johnson
@ChrisJohnson, ciekawe odkrycie ... Zrozumiałem, że MPM nie może być zmieniony przez konfigurację, tylko przez kompilację. Wygląda na to, że OP myślał tak samo, ponieważ skomentował to pytanie „lub bardziej technicznie” skompilowanym do działania jako „”. Spróbuję odtworzyć twoją odpowiedź, a kiedy ją potwierdzę, odwołam moją.
Steven T. Snyder
Potwierdziłem w dokumentacji apache na httpd.apache.org/docs/trunk/mpm.html, że MPM można budować jako moduły DSO i dynamicznie ładować zgodnie z dyrektywą LoadModule na „platformach Unix i podobnych”. Tak więc MPM można rzeczywiście zmienić w czasie ładowania w pewnych okolicznościach (co może być obecnie najczęstszą konfiguracją ..)
Steven T. Snyder
4

Chris Johnson ma rację. Przejdź do httpd.conf => dodaj ten wiersz:

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

Uruchom ponownie apache: /etc/init.d/httpd restart. Następnie przejdź do informacji o hoście lokalnym / serwerze przez przeglądarkę i spójrz na sekcję Nazwa MPM .

songpham
źródło
Jeszcze lepiej, umieść to między <IfModule info_module> </IfModule>
Lexib0y 25.10.15
3

Oto inna metoda, która, jak się spodziewam, powinna być niezawodna w określaniu, który MPM jest w użyciu. Dodaj następujące elementy do httpd.conf:

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

Następnie sprawdź nagłówki za pomocą curl -I localhost | grep X-MPM.

Quinn Comendant
źródło
3

na centos (lub rhel) możesz uruchomić to polecenie:

ps -ef | grep httpd

jeśli widzisz /usr/sbin/httpd.workeruruchomione, oznacza to, że używa MPM procesu roboczego. jeśli widzisz /usr/sbin/httpduruchomiony, oznacza to, że używa prefork

James Turner
źródło
2

Odpowiedź Chrisa Johnsona jest słuszna.

Po włączeniu modułu informacyjnego, zgodnie z dokumentacją Apache Documentation ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ), ta jedna linijka da Ci MPM, którego używasz:

links -dump http://localhost/server-info/?server | grep "MPM Name"
Manu
źródło
2

Jednym ze sposobów, w jaki mogę to rozgryźć w Debianie, jak dystrybucja, jest uruchomienie:

apachectl -V | grep -i mpm
Klątwa
źródło