MPMs Apache - Worker vs Prefork

13

Estou tentando descobrir qual é o melhor Apache MPM que posso instalar no meu VPS. Vi alguns benchmarks e o MPM Worker parece ter um desempenho melhor que o Prefork, mas por algum motivo todos parecem recomendar o Prefork over Worker para configurações de PHP.

Isso ocorre apenas porque algumas funções PHP não são seguras para threads? Apenas me setlocale()vem à mente, mas usarei o mesmo local em todas as instâncias, então não acho que isso seja um problema. Meu VPS tem pouca memória e sinto que o MPM do trabalhador seria uma melhor correspondência para minhas necessidades, no entanto, não tenho certeza.

Alguém pode me ajudar a decidir sobre isso? Obrigado!


PS: Eu também procurei no nginx e lighttpd. O nginx parece incrível, mas estou tentando evitar a compilação a partir do código-fonte e ainda não entendo para que serve o php-fpm. Em relação ao lighttpd - foi incrivelmente fácil configurar o PHP / FCGI com ele, mas ouvi dizer que há vazamento de memória. Isso ainda é verdade?

Alix Axel
fonte
2
O problema é que, embora o PHP principal agora seja seguro para threads, quando se trata de extensões, todas as apostas estão desativadas.
mattdm

Respostas:

12

Você deve usar o prefork ao usar o apache + mod_php. O FAQ descreve claramente o motivo pelo qual:

http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2

Por que não devo usar o Apache2 com um MPM encadeado em um ambiente de produção?

PHP é cola. É a cola usada para criar aplicativos legais da Web, juntando dezenas de bibliotecas de terceiros e fazendo tudo parecer uma entidade coerente por meio de uma interface de linguagem intuitiva e fácil de aprender. A flexibilidade e o poder do PHP dependem da estabilidade e robustez da plataforma subjacente. Ele precisa de um sistema operacional ativo, de um servidor Web ativo e de bibliotecas de terceiros que se colem. Quando qualquer um desses parar de funcionar, o PHP precisa de maneiras de identificar os problemas e corrigi-los rapidamente. Quando você torna a estrutura subjacente mais complexa por não ter segmentos de execução completamente separados, segmentos de memória completamente separados e uma caixa de proteção forte para cada solicitação, outras fraquezas são introduzidas no sistema do PHP.

O nginx + php-fpm também é uma excelente maneira de executar aplicativos php. O nginx possui suporte nativo ao FastCGI e o php-fpm é uma das melhores maneiras de executar o php em um ambiente FastCGI. Veja a documentação do php aqui:

http://www.php.net/manual/en/install.fpm.php

dialt0ne
fonte
Em relação aos MPMs do Apache, acho que entendi, o prefork é o caminho a percorrer. Estou inclinado a uma configuração nginx ou lighttpd devido ao alto consumo de memória do Apache. O Lighttpd e o PHP-FCGI funcionam imediatamente quando instalam com o aptitude, no entanto, não tenho certeza se a memória vaza que todo mundo continua falando em 06/07 ainda está presente. Também li que o Nginx tem um uso de CPU menor, mas não consigo fazê-lo funcionar com o PHP-CGI e muito menos com o PHP-FPM. Existe uma maneira fácil de instalar isso no Ubuntu usando o gerenciador de pacotes? Você recomenda alguma leitura sobre este assunto?
Alix Axel
Com o multiverso ativado, pude "apt-get install nginx" no lucid e ele roda como um campeão - estou usando em sistemas de produção. Há um bom exemplo de ponto de partida aqui, howtoforge.com/… , mas como sempre YMMV.
Dialt0ne
Consigo instalar o nginx usando o apt, mas não consigo vinculá-lo ao interpretador PHP. O link que você forneceu possui uma nova fonte que parece fornecer o php5-fpmpacote. Eu vou experimentar.
Alix Axel
Esse link pode ser melhor howtoforge.com/… Estou usando o repositório brianmercer para meus sistemas de produção para php5-fpm.
dialt0ne