Recurso temporariamente indisponível durante a conexão ao upstream (php5-fpm)

6

Eu freqüentemente recebo este erro em páginas aleatórias quando são como ~ + 10K conexões (netstat-an | grep 80 | wc -l). Isso acontece enquanto ainda há + 10GB de memória livre e a carga do servidor é menor que 3.

Minhas configurações relevantes:

/etc/php5/fpm/php.ini

memory_limit = 1024M
default_socket_timeout = 120

/etc/php5/fpm/pool.d/www.conf

pm = dynamic 
pm.max_children = 30 
pm.start_servers = 5
pm.min_spare_servers = 2 
pm.max_spare_servers = 5 
;pm.max_requests =20000 #uncommented with any value didn't fixed
request_terminate_timeout = 120s

Eu também dobrei os vlues acima (ou seja, 60 filhos, 10 de início, 10 servidores máximos) sem sucesso.

/etc/nginx/nginx.conf

worker_connections 4024;
keepalive_timeout 10;

O próprio Nginx atrás de Varnish e memcached é enable. A renderização de páginas é bem rápida em geral.

Este parece ser um problema bastante comum; você não encontrou nenhuma solução útil ou mesmo uma análise das possíveis causas. Portanto, suas sugestões / soluções são muito apreciadas.

    
por alfish 20.04.2012 / 10:37

1 resposta

8

Infelizmente, é difícil dar uma resposta definitiva a essa pergunta sem mais detalhes.

Eu tenho alguns palpites:

Meu primeiro palpite é que o (s) seu (s) soquete (s) de trabalho do php5-fpm tem um backlog de escuta muito pequeno para sua carga. O tamanho da fila de pendências é 128 por padrão no Linux.

Para aumentar você deve:

  1. Aumentar o valor de net.core.somaxconn sysctl.
  2. Aumentar a configuração de configuração listen.backlog php5-fpm.

Você pode tentar aumentar ambos para 2048, por exemplo, para ver se isso ajuda.

Meu segundo palpite é o limite máximo de descritores de arquivos abertos por processo dos trabalhadores nginx. A maneira correta de aumentá-lo depende da sua distribuição. No Ubuntu / Debian você deve dar uma olhada na configuração do arquivo /etc/default/nginx e worker_rlimit_nofile nginx.

    
por 24.07.2012 / 19:19