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?