PHP5-FPM e 'ondemand'

4

Eu configurei um servidor com Nginx e PHP5-FPM, e as coisas estão funcionando bem. No entanto, à medida que adiciono mais e mais sites ao servidor, vejo que o uso da memória aumenta constantemente, e cheguei à conclusão de que o PHP5-FPM é "culpado".

O que eu faço atualmente é configurar um pool PHP5-FPM separado para cada site e configurar esse pool de acordo com o tráfego esperado. No entanto, com sites suficientes, no final, terei um servidor que apenas incorpora um número bastante grande de "filhos" do PHP5-FPM que estão apenas esperando pelo trabalho.

Acabei de descobrir sobre o ondemand modo PHP5-FPM, que me permite configurar o PHP5-FPM de forma que os processos filhos sejam bifurcados somente quando realmente necessários e, em seguida, mantidos vivos por um tempo dada duração ao processo.

No entanto, não consigo encontrar muitos detalhes sobre isso. O que mais me interessa é como as variáveis pm.max_children e pm.max_requests afetam o modo ondemand (se houver). Presumo que as variáveis pm.start_servers , pm.min_spare_servers , pm.max_spare_servers não se aplicam ao modo ondemand .

    
por sbrattla 13.02.2013 / 09:39

2 respostas

11

você está certo, start_servers, min_spare_servers e max_spare_servers não se aplicam ao modo ondemand. As seguintes variáveis são aquelas que se aplicam ao modo ondemand:

  • pm.max_children
  • pm.process_idle_timeout
  • pm.max_requests

Quando você define pm = ondemand, o FPM cria um fork para crianças assim que ele precisa, sempre mantendo o número de filhos menor ou igual a pm.max_children, portanto, essa variável é um limite superior no número de childrens bifurcadas ao mesmo tempo.

As outras duas variáveis permitem que você especifique quando uma criança precisa ser destruída:

  • pm.process_idle_timeout define quanto tempo uma criança aguarda sem trabalho antes de ser destruída. É definido em segundos.

  • pm.max_requests define quantos pedidos (um de cada vez) os filhos processarão antes de serem destruídos. Por exemplo, se você definir essa variável com um valor de 50, os filhos processarão 50 solicitações e se fecharão. Se o processo mestre do FPM ainda precisar de outros filhos, ele irá criar um novo.

Na minha empresa, usamos o modo sob demanda no FPM e usamos pm.max_requests para forçar a reciclagem de fpm para crianças e evitar o uso de memória alta.

Espero que isso ajude,

Saudações.

    
por 13.02.2013 / 18:15
1

Pode ser esse bug link

TLDR; Se dois clientes se conectarem ao PHP-FPM no modo onmand no mesmo socket unix antes que accept () aconteça na criança, somente um será aceito () ed.

    
por 24.08.2016 / 23:34

Tags