Come faccio a sapere se apache è in esecuzione come prefork o worker?


40

Come faccio a sapere se apache è in esecuzione (o configurato per essere eseguito) come prefork o worker?


2
o tecnicamente "compilato per funzionare come"

Risposte:


37

L'MPM è configurato al momento della compilazione. Un modo per capirlo in seguito è elencare i moduli compilati. Tale elenco includerà il MPM scelto. L'elenco può essere realizzato eseguendo il binario apache, con il flag -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:~$ 

Qui troviamo il modulo worker.c, quindi sto eseguendo il lavoratore MPM.


4
Questa risposta è sbagliata Vedi la mia risposta
Chris Johnson,

1
Hm, su Ubuntu non ho né lavoratore né prefork elencati quando faccio questo ...
mlissner

2
Su Ubuntu è possibile utilizzare apache2ctl -Mper elencare i moduli attivi.
Steffen Nielsen,

53

Le risposte fornite da Series8217 e Andol sono entrambe errate.

La domanda era: come sapere se Apache esegue prefork o worker. Il consiglio dato dalle altre risposte dice solo qual è il MPM predefinito (basato sui moduli compilati), non se quel default o un'altra scelta è attualmente in uso.

Se httpd -Vmostra prefork, significa semplicemente che prefork è l'MPM predefinito compilato. Ciò può essere sovrascritto modificando un'impostazione del file di configurazione di Apache, come mostrato in questo processo:

  1. Modifica il file di configurazione (ad es. /etc/sysconfig/httpdSu CentOS / RedHat)
  2. Aggiungi o decommenta questa riga: HTTPD=/usr/sbin/httpd.worker
  3. Riavvia Apache

Quale MPM è attualmente in esecuzione può essere mostrato usando questo processo:

  1. Abilita Apache mod_info
  2. Richiedi l'URL mod_info, in genere curl localhost/server-info
  3. La sezione "Impostazioni server" mostrerà "Nome MPM: lavoratore"
  4. Esegui di httpd -Vnuovo: mostrerà ancora prefork, non worker

Linea di fondo:

  • httpd -V mostra l'opzione predefinita, non quale opzione è attualmente in uso

Ci sono risposte su molti, molti siti web che dicono, usano httpd -Vper dire se Apache sta eseguendo prefork o worker. Hanno tutti torto. Prova la procedura sopra per vedere di persona.


Cordiali saluti, secondo httpd.apache.org/docs/trunk/mpm.html l'MPM può essere un modulo statico su tutte le piattaforme o costruito come DSO (su Unix). Quando è costruito come un modulo statico, "Il server deve essere ricostruito per cambiare MPM." La documentazione di Apache è errata sul fatto che il modulo statico MPM sia immutabile se non ricostruendo il server?
Steven T. Snyder,

Sembra molto qualcosa di specifico per la distribuzione, con un wrapper di livello superiore in giro?
andol

2
Su CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event e /usr/sbin/httpd.worker sono tutti binari distinti con MPM diversi configurati in fase di compilazione (rispettivamente prefork, event e worker). La modifica dell'impostazione di HTTPD in / etc / sysconfig / httpd controlla solo quale binario viene eseguito dallo script init.
Paul Haldane,

Ho dovuto eseguire apache2 -V invece di httpd -V su Ubuntu 16.04 LTS
cnizzardini

41

In Ubuntu 14.04

a2query -M

Tells event, prefork,worker

È possibile modificarlo aggiungendo collegamenti simbolici per mpm_<chosen>da mods-availablea mods-enabledin /etc/apache2.

Ne è consentito solo uno alla volta.


2
Questa deve essere la risposta accettata.

si, ottima risposta! semplice e restituisce ciò che è necessario
Flash Thunder

Ha funzionato per me al meglio, grazie (ha funzionato su Apache 2.4 .... sembra che non funzioni su Apache 2.2)
dmikam

L' eventMPM è, secondo il sito di Apache, "una variante del lavoratore MPM con l'obiettivo di consumare i thread solo per le connessioni con l'elaborazione attiva".
Jonathan Berger,

7

Su RedHat e derivati, basta avviare topo ps auxe guardare il nome del processo httpd:

  • httpd significa che Apache è in esecuzione come prefork
  • httpd.worker significa che funziona come lavoratore

4

Su RHEL / Fedora / etc, eseguire httpd -V. Otterrai un output che include quanto segue:

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

Qui "Server MPM" è "Prefork", quindi il mio server esegue prefork MPM.


Questa risposta è sbagliata Vedi la mia risposta
Chris Johnson,

@ChrisJohnson, interessante scoperta ... La mia comprensione era che l'MPM non poteva essere modificato dalla configurazione, ma solo dalla compilazione. Sembra che l'OP abbia pensato lo stesso, dal momento che ha commentato la sua domanda con "o più tecnicamente 'compilato per funzionare come'". Cercherò di riprodurre la tua risposta e una volta confermata la revoca la mia.
Steven T. Snyder,

Ho confermato tramite la documentazione di Apache su httpd.apache.org/docs/trunk/mpm.html che gli MPM possono essere costruiti come moduli DSO e caricati dinamicamente con la direttiva LoadModule, su "Unix e piattaforme simili". Quindi l'MPM può davvero essere cambiato al momento del caricamento in determinate circostanze (che potrebbe essere la configurazione più comune in questi giorni ..)
Steven T. Snyder,

4

Chris Johnson ha ragione. Vai a httpd.conf => aggiungi questa riga:

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

Riavvia apache: /etc/init.d/httpd restart. Quindi accedi a localhost / server-info dal tuo browser e guarda la sezione Nome MPM .


Ancora più bello, mettilo tra <IfModule info_module> </IfModule>
Lexib0y

3

Ecco un altro metodo che mi aspetto dovrebbe essere affidabile nel determinare quale MPM è in uso. Aggiungi quanto segue al tuo httpd.conf:

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

Quindi controlla le intestazioni usando curl -I localhost | grep X-MPM.


3

su centos (o rhel) puoi eseguire questo comando:

ps -ef | grep httpd

se vedi in /usr/sbin/httpd.workeresecuzione, allora sta usando il lavoratore MPM. se vedi in /usr/sbin/httpdesecuzione, utilizza prefork


2

La risposta di Chris Johnson è giusta.

Dopo aver abilitato il modulo informativo, come documentato nella documentazione di Apache ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ), questo liner ti darà l'MPM che stai usando:

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

2

Un modo in cui lo capisco in Debian come distro, è eseguendo:

apachectl -V | grep -i mpm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.