ajustando a configuração do fpm do php

1

Ultimamente, meu servidor (i7-2600 @ 4x3.4ghz, 8GB Ram) está obtendo médias de carga realmente altas. Coloquei em cache as páginas mais populares e tentei removê-las também para testar se elas são a culpa, mas isso não traz mudanças significativas.

A média de carga está abaixo de 1.0 quando eu reinicio meu servidor, então ele começa a crescer e vai para 6,0 - 25,00 e eu recebo 504 erros de timeout do gateway e o ssh está ficando muito lento e causa muitos problemas.

Eu acho que tem algo a ver com minha configuração do php-fpm, porque eu tenho usado mysqltuner.pl e seguindo as instruções lá, também como eu disse em cache e removi por alguns minutos as páginas mais populares e elas também têm consultas com junções à esquerda etc e que não deram mudanças significativas, quero dizer que a carga pode cair para cerca de 5%, mas isso não é o que eu estou depois.

Meu site recebe cerca de 500 usuários únicos a cada 5 minutos (estatísticas em tempo real do Google Analytics) e cerca de 5 a 15 visualizações de página a cada segundo.

Então aqui está minha configuração do php-fpm, alguém pode sugerir o que ajustar?

pm = dynamic

pm.max_children = 500

pm.start_servers = 400

pm.min_spare_servers = 50

pm.max_spare_servers = 500

pm.max_requests = 0

    
por Treat 26.01.2013 / 16:45

1 resposta

4

É altamente improvável que você tenha RAM suficiente para ter 500 processos PHP em execução. Em minhas caixas, eles normalmente levam de 40 a 80MB cada, dependendo do que estão fazendo.

Então, o que acontece aqui é que, quando você inicia o PHP, ele tenta iniciar 400 cópias de si mesmo, como foi o que você especificou. Mas você precisaria de pelo menos o dobro de RAM que você tem atualmente! Então a máquina rapidamente começa a trocar, e pára.

Elimine estes números dramaticamente, até que esteja bem dentro dos limites da sua memória. Você não precisa de 400 processos simultâneos em execução para lidar com 5 a 15 visualizações de página por segundo.

Você também deve definir um valor para pm.max_requests em caso de vazamentos de memória no PHP ou em outro módulo PHP que você esteja usando. Infelizmente, estes são muito comuns.

Para recuperar seu servidor, tente começar com:

pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 50
pm.max_requests = 500

Isso lhe dá bastante espaço para processar o tráfego normal e os picos de até 5x a carga normal. Você pode aumentar pm.max_children se começar a ficar muito mais ocupado e ver as entradas de log sobre a falta de crianças, mas verifique sua RAM livre antes de fazer isso; se você chegar a esse ponto, provavelmente terá que atualizar o servidor.

    
por 26.01.2013 / 16:58