Como posso saber se o apache está sendo executado como prefork ou worker?

40

Como posso saber se o apache está sendo executado (ou configurado para ser executado) como pré-fork ou trabalhador?


fonte
2
ou mais tecnicamente 'compilado para ser executado como'

Respostas:

37

O MPM é configurado em tempo de compilação. Uma maneira de descobrir isso depois é listar os compilados nos módulos. Essa lista incluirá o MPM escolhido. A listagem pode ser realizada com o binário apache, com o sinalizador -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:~$ 

Aqui encontramos o módulo worker.c, portanto, estou executando o MPM do trabalhador.

andol
fonte
4
Esta resposta está errada. Veja minha resposta.
Chris Johnson
11
Hm, no Ubuntu Eu não tenho nem trabalhador, nem prefork listado quando eu fizer isso ...
mlissner
2
No Ubuntu, você pode usar apache2ctl -Mpara listar os módulos ativos.
SteffenNielsen
53

As respostas dadas por Series8217 e Andol estão incorretas.

A questão era: como saber se o Apache está executando o prefork ou o worker. O conselho dado pelas outras respostas apenas informa qual é o MPM padrão (com base nos módulos compilados), não se esse padrão ou outra opção estiver sendo usada no momento.

Se httpd -Vmostra prefork, isso significa que o prefork é o MPM padrão compilado. Isso pode ser substituído alterando uma configuração do arquivo de configuração do Apache, conforme mostrado neste processo:

  1. Edite o arquivo de configuração (por exemplo, /etc/sysconfig/httpdno CentOS / RedHat)
  2. Adicione ou remova o comentário desta linha: HTTPD=/usr/sbin/httpd.worker
  3. Reinicie o Apache

Qual MPM está realmente em execução pode ser mostrado usando este processo:

  1. Habilitar o Apache mod_info
  2. Consulte o URL mod_info, normalmente curl localhost/server-info
  3. A seção "Configurações do servidor" mostrará "Nome do MPM: Trabalhador"
  4. Executar httpd -Vnovamente - ainda mostrará prefork, não worker

Bottom line:

  • httpd -V mostra a opção padrão, não qual opção está realmente em uso

Existem respostas em muitos sites dizendo: use httpd -Vpara saber se o Apache está executando o prefork ou o worker. Eles estão todos errados. Experimente o procedimento acima para ver por si mesmo.

Chris Johnson
fonte
Para sua informação, de acordo com httpd.apache.org/docs/trunk/mpm.html, o MPM pode ser um módulo estático em todas as plataformas ou construído como um DSO (no Unix). Quando é construído como um módulo estático, "O servidor deve ser reconstruído para alterar o MPM". A documentação do apache está incorreta sobre o módulo estático MPM ser imutável, exceto pela reconstrução do servidor?
Steven T. Snyder,
Isso soa muito como algo específico da distribuição, com um invólucro de nível superior por aí?
andol
2
No CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event e /usr/sbin/httpd.worker, existem binários distintos com diferentes MPM configurados em tempo de compilação (pré-fork, evento e trabalhador, respectivamente). Alterar a configuração do HTTPD em / etc / sysconfig / httpd apenas controla qual binário é executado pelo script init.
Paul Haldane
Eu tive que correr apache2 -V vez de httpd -V no Ubuntu 16.04 LTS
cnizzardini
41

No Ubuntu 14.04

a2query -M

Diz event, prefork,worker

Você pode alterá-lo adicionando links simbólicos de mpm_<chosen>de mods-availablepara mods-enabledem /etc/apache2.

Somente um é permitido por vez.

JorgeeFG
fonte
2
Essa precisa ser a resposta aceita.
sim, ótima resposta! simples e retorna o que é necessário
o Flash Trovão
Trabalhou para mim o melhor, obrigado (trabalhou no apache 2.4 .... parece que não funciona no apache 2.2)
dmikam
O eventMPM é, de acordo com o site da Apache, "uma variante do MPM de trabalho com o objetivo de consumir threads apenas para conexões com processamento ativo".
Jonathan Berger
7

No RedHat e derivados, basta iniciar topou ps auxver o nome do processo httpd:

  • httpd significa que o Apache está sendo executado como prefork
  • httpd.worker significa que está sendo executado como trabalhador
Corrado Fiore
fonte
4

No RHEL / Fedora / etc, execute httpd -V. Você obterá alguma saída que inclui o seguinte:

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

Aqui 'Server MPM' é 'Prefork', então meu servidor está executando o MPM pré-fork.

Steven T. Snyder
fonte
Esta resposta está errada. Veja minha resposta.
Chris Johnson
@ ChrisJohnson, descoberta interessante ... Meu entendimento era que o MPM não podia ser alterado pela configuração, apenas pela compilação. Parece que o OP pensou o mesmo, já que ele comentou sua pergunta com "ou mais tecnicamente 'compilado para executar como'". Vou tentar reproduzir sua resposta e, uma vez que a confirme, revogarei a minha.
Steven T. Snyder
Confirmei através da documentação do apache em httpd.apache.org/docs/trunk/mpm.html que os MPMs podem ser criados como módulos DSO e carregados dinamicamente com a diretiva LoadModule, em "Unix e plataformas similares". Assim, o MPM pode, efectivamente, ser alterada em tempo de carga em determinadas circunstâncias (que pode ser a configuração mais comum nos dias de hoje ..)
Steven T. Snyder
4

Chris Johnson está correto. Vá para httpd.conf => adicione esta linha:

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

Reinicie o apache: /etc/init.d/httpd restart. Em seguida, acesse localhost / server-info pelo seu navegador e consulte a seção Nome do MPM .

songpham
fonte
Ainda melhor, coloque isso entre <IfModule info_module> </IfModule>
Lexib0y
3

Aqui está outro método que eu espero que seja confiável para determinar qual MPM está em uso. Adicione o seguinte ao seu httpd.conf:

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

Em seguida, verifique os cabeçalhos usando curl -I localhost | grep X-MPM.

Quinn Comendant
fonte
3

no centos (ou rhel) você pode executar este comando:

ps -ef | grep httpd

se você vê /usr/sbin/httpd.workerexecutando, está usando o MPM de trabalho. se você vir /usr/sbin/httpdexecutando, está usando o prefork

James Turner
fonte
2

A resposta de Chris Johnson está certa.

Depois de ativar o módulo info, conforme documentado na documentação do Apache ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ), esse liner fornecerá o MPM que você está usando:

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

Uma maneira de descobrir isso no Debian como distribuições, é executando:

apachectl -V | grep -i mpm
Hex
fonte