Como liberar memória PHP-FPM?

3

Existem várias discussões reclamando do alto uso de memória de PHP-FPM , sem nenhuma abordagem prática a ser superada. Ao explorar o problema com vários testes, o problema está relacionado à idade de PHP-FPM age.

Imagine que temos pm.max_children = 10 e tenha um script PHP consumindo 10M de memória. Espera-se precisar de 100MB de MB. Isso está correto para os primeiros 10 processos. Depois de processar 20 scripts PHP, o uso da memória do sistema é de 200 MB, o que significa que a memória consumida durante os primeiros 10 processos não foi liberada.

Isso aumentará o uso de memória até atingir pm.max_requests quando PHP-FPM processos forem redefinidos.

OBSERVAÇÃO: Este foi apenas um exemplo simplificado para esclarecimento e não comportamento real. No mundo real, isso acontece às vezes. Normalmente, no final de um script PHP, a memória consumida pelo PHP será automaticamente liberada. No PHP-FPM, essa memória sometimes (não sei quando) não será liberada.

Isto significa que para processar scripts similares (usando 10MB de memória) com

pm.max_children = 10
pm.max_requests = 100

Você não precisa de 100MB ou 1000MB de memória; mas algo entre. Em outras palavras, pegadas de algum PHP previous processes permanecem nos PHP-FPM filhos.

De acordo com essa teoria, o alto uso de memória de PHP-FPM será superado reduzindo pm.max_requests , mas não é a solução final, e precisamos encontrar uma abordagem para liberar os efeitos de processos anteriores do PHP em os PHP-FPM filhos. Alguma idéia?

    
por Googlebot 03.04.2012 / 14:13

1 resposta

2

Sem saber exatamente que tipo de aplicativo você está executando, é difícil dizer o que você deve fazer. Mas, considerei usar o gerenciador de processos sob demanda? Ele matará os processos após o tempo N, mantendo assim sua memória mais livre do que a dinâmica ou a estática que você provavelmente está usando.

    
por 03.04.2012 / 15:07