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?


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.


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.


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.


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

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.


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 .


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.


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


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"

2

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

apachectl -V | grep -i mpm
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.