[FUG-BR] Apache22+php5 - mod_php ou fastcgi ?

Patrick Tracanelli eksffa em freebsdbrasil.com.br
Segunda Dezembro 15 10:41:05 BRST 2008


Leonardo Augusto escreveu:
> Ola,
> 
> Tenho pesquisado na net e vi alguns comentarios que o php5 tem um
> desempenho melhor no apache22 se for usado via mod_fastcgi..
> ao inves de mod_php
> 
> O argumento é que o core do php nao é carregado pelo apacha a cada
> instancia do servidor...
> E para o mod_php ainda nao funciona bem com o tal do mpm.. que
> resolveria esse problema..
> 
> É melhor entao usar o php via mod_fastcgi ?

Pessoalmente não sei não, não vejo sentido nisso. A grande vantagem de 
performance do php no Apache é exatamente o modulo DSO. O que você deve 
ter lido foram duas coisas, a performance no Apache 2.2 é menor (quando 
comparado com Apache 2.0) e o carreamento da nova instância é mais 
lento. Já li ambos e o primeiro fato eu não avaliei, o segundo fato não 
faz sentido:

- Ao invés de um novo httpd com o DSO do php, o cgi carrega um novo 
php-cgi via spawn-fcgi; como pode ser mais rápido? Conte comigo as 
chamadas de sistema, ao invles de 1 malloc pro DSO são um execve+fork 
pro httpd carregar o spawn-cgi, que por sua vez faz 1 malloc+execve+fork 
para carregar o php-cgi; em cada instância "nova";

- Depois disso cada instrucão processada pelo PHP é enviada através de 
socket local para o php-cgi, quee processa e devolve tambem via socket 
para o Apache; são cerca de 4 syscalls a mais por operacão, que não 
existe no caso do uso de módulo DSO;

- Finalmente, se há qualquer diferenca de performance é no startup da 
instância do servidor. Isso é problema? Aumente o MinSpareServers e vai 
startar todos ao custo de 1 syscall de malloc por DSO e 1 syscall 
fork/execve ao invés de várias por instância;

- Só pode ser problema para quem usa MaxRequestsPerChild diferente de 0 
no Apache. Ainda assim se for um valor muito baixo (tipo 2) para o 
MaxRequestsPerChild;

Por último, se o custo de carregar o DSO do php é tão grande, porque não 
é com o mod_access, o mod_ssl, com WebDAV, e mais N módulos DSO 
extremamente populares que o sistema carrega em cada instância?

Logico, to falando com base no Apache 2.0; No 2.2. porem ainda que haja 
mesmo essa diferenca de performance se for tão crítica ao ponto de fazer 
uma implementacão mais pesada ficar mais rápida é um problema no mínimo 
crucial, pq o framework de DSO do Aapche é o basico dele.

Sei que o PHP em modo CGI tem como vantagem pode ser executado com 
privilégio do usuário dono do script, ao invés de ser com usuário do 
Webserver. Em ambiente compartilhado isso pode aumentar a performance; 
por outro lado em DSO temos os php_admin_flags|value da vida 
configuráveis por contexto; o que temos de equivalente via CGI? Trocar 
variáveis de ambiente não serve, o programador redefine elas quando bem 
entender.

O fato acima só pra considerar que nem tudo é performance. Segurança na 
minha opinião é mais critico e ai sim pode haver uma conversa 
interessante sobre fastcgi VS DSO.

-- 
Patrick Tracanelli

FreeBSD Brasil LTDA.
Tel.: (31) 3516-0800
316601 em sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"



Mais detalhes sobre a lista de discussão freebsd