Como saber: É nginx ou PHP-cgi que é mais lento?

1

Eu gerencio um site com muito tráfego. Estou usando nginx e php fast-cgi. No entanto, ao carregar documentos php simples no navegador, leva até 5 a 6 segundos para que a página seja carregada. Às vezes, isso apenas resulta em um erro nginx "404 não encontrado".

Ao usar o "htop" no debian, não estou nem perto de usar os recursos do meu servidor. Então o que está acontecendo? É nginx? É PHP-rápido-cgi? Eu não posso dizer onde está o gargalo da garrafa.

Um snippet da minha configuração do nginx:

user  www-data www-data;
worker_processes  2;

events {
    worker_connections  4048;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  10;
    include /usr/local/nginx/sites-enabled/*;
...
}

Um trecho da minha configuração do fast-cgi:

EXEC_AS_USER=www-data

# Host and TCP port for FASTCGI-Listener (default: localhost:9000)

FCGI_HOST=localhost
FCGI_PORT=9000

# Environment variables, which are processed by PHP

PHP_FCGI_CHILDREN=8
PHP_FCGI_MAX_REQUESTS=0

Muito obrigado !!

    
por Peter Sorenson 12.06.2012 / 19:14

3 respostas

0

Quanto custa muito tráfego? Apenas algumas dicas:

  • use o cache o máximo possível
  • o número de processos de trabalho pode ser igual ao número de núcleos de CPU
  • feche as conexões ativas o mais cedo possível ou desative-as completamente (tente digamos keepalive_timeout 5 )
  • cada conexão precisa de um filehandle worker_rlimit_nofile 20000;
  • quantidade total de usuários que você pode veicular em 1 segundo (aproximadamente) = worker_processes * worker_connections/ (keepalive_timeout * 2)
  • desativa os registros de acesso, a menos que você realmente precise deles
  • use um balanceador (se não for viável com um servidor)
por 13.06.2012 / 09:55
1

Silencie o servidor, coloque strace em todos os processos php e nginx, tente um pedido e observe onde ele aguarda.

Como alternativa, procure uma ferramenta de criação de perfil para o php e reúna alguns dados com ela.

    
por 12.06.2012 / 20:07
0
  1. Tente configurar o FastCGI como soquete unix e não como soquete de internet. Isso economizaria em alguns casos até 20% do tempo gasto.
  2. Você pode aumentar o seu worker_processes até o número de núcleos disponíveis.
  3. Verifique sua configuração do php-fpm, pois ela possui opções suficientes para:
    • elimina solicitações de longa duração;
    • relatório sobre pedido de longa duração.
  4. Altere PHP_FCGI_MAX_REQUESTS para algo relevante como 1000. Apenas para o caso de corrupção de memória.
por 13.06.2012 / 09:22