[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