and restarted again php-fpm [...] the server worked for a few minutes and back to the problem over and over
O problema é a configuração do php-fpm
Mas não é o tempo limite. Aumentar o tempo limite apenas dá ao php mais tempo para processar uma única solicitação - o que pode mascarar os sintomas, mas não é a solução correta.
O log do php-fpm deve explicar por que o servidor está com dificuldades aparentes; na minha experiência (obviamente, na ausência de informações, isso é um palpite) o arquivo de log do php-fpm conterá entradas como esta:
#/var/log/php5-fpm.log
[19-Oct-2014 06:25:10] NOTICE: error log file re-opened
[19-Oct-2014 17:46:56] WARNING: [pool www] seems busy (you may need to increase
pm.start_servers, or pm.min/max_spare_servers), spawning 1 children, there are
1 idle, and 5 total children
...
Se houver apenas algumas entradas de log como as acima, isso não é um grande problema. Se houver muitos e somente minutos ou segundos de intervalo - então o php-fpm tem recursos insuficientes para a carga que está sendo solicitada para lidar com isso.
Isso não é incomum, porque um arquivo de configuração padrão dist php-fpm conterá algo semelhante a isto:
# /etc/php5/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
O que significa que o php-fpm irá apenas lidar com um máximo de 5 pedidos em paralelo .
Especialmente com algo como wordpress, que para uma única página html entrega um grande número de pedidos subseqüentes (imagens, css, arquivos js etc.) também para php - é fácil para um grande e fila crescente de solicitações para formar de forma que, para qualquer solicitação, ele deve primeiro aguardar que as solicitações em andamento e já em espera sejam processadas primeiro. Isso leva a atrasos (ele aparece como tempo de espera em qualquer ferramenta de criação de perfil de navegador) e freqüentemente leva a um grande número de tempos de espera.
Observe também que um grande número de 404s (pedidos de qualquer coisa que não exista) é uma maneira fácil de exagerar as limitações de qualquer servidor - verifique e corrija quaisquer 404s que o site esteja gerando.
Como corrigir isso
Se o problema é que o php-fpm tem poucos processos de servidor em execução - apenas os aumente. Os números a serem utilizados dependem do hardware do servidor em que são implantados; aqui está uma sugestão:
# /etc/php5/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 20
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
Isso permitiria atender 20 solicitações em paralelo - e deve aliviar qualquer problema sem causar problemas no servidor.
Em caso de dúvida, há uma regra simples a seguir ao alterar a configuração do php-fpm:
- Aumente até que as mensagens de erro desapareçam (e o desempenho seja aceitável)
- Diminuir se o servidor ficar sem memória ou a carga do servidor for inaceitável:)