Come faccio a sapere se apache è in esecuzione (o configurato per essere eseguito) come prefork o worker?
Come faccio a sapere se apache è in esecuzione (o configurato per essere eseguito) come prefork o worker?
Risposte:
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.
apache2ctl -Mper elencare i moduli attivi.
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:
/etc/sysconfig/httpdSu CentOS / RedHat)HTTPD=/usr/sbin/httpd.workerQuale MPM è attualmente in esecuzione può essere mostrato usando questo processo:
curl localhost/server-infohttpd -Vnuovo: mostrerà ancora prefork, non workerLinea di fondo:
httpd -V mostra l'opzione predefinita, non quale opzione è attualmente in usoCi 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.
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.
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".
Su RedHat e derivati, basta avviare topo ps auxe guardare il nome del processo httpd:
httpd significa che Apache è in esecuzione come preforkhttpd.worker significa che funziona come lavoratoreSu 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.
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 .
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.
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
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"
Un modo in cui lo capisco in Debian come distro, è eseguendo:
apachectl -V | grep -i mpm