Como configurar o PHP-FPM para utilizar pouca memória RAM

PHP 8.3 RC1 lançado com json_validate e classes anônimas somente leitura
PHP 8.3 RC1 lançado com json_validate e classes anônimas somente leitura

Neste artigo iremos ensinar como configurar o PHP-FPM na sua distribuição Linux, de modo a diminuir o consumo de memória RAM. A maioria dos sites que utilizam o LINUX, acabam configurando o LAMP (Linux, NGINX/APACHE, MySQL / MariaDB e PHP), provavelmente está usando o proxy FastCGI no NGINX (como um servidor HTTP) para processamento de PHP. PHP-FPM (um acrônimo de FastCGI Process Manager) é uma implementação alternativa de PHP FastCGI amplamente usada e de alto desempenho. Temos um artigo onde explicamos as diferenças entre PHP e PHP-FPM.

Os administradores acabam se deparando com algumas situações, onde todos os nossos sites PHP em um de nossos servidores LAMP tornaram-se lentos e, eventualmente, pararam de responder ao fazer login no servidor. Após análise, descobrimos que o sistema estava com pouca RAM, pois os processos PHP-FPM havia consumido a maior parte da RAM, conforme indicado na imagem a seguir (relances – ferramenta de monitoramento do sistema).

Neste artigo, mostraremos como evitar que o PHP-FPM consuma muito ou toda a memória do sistema (RAM) no Linux. No final deste artigo, você aprenderá como reduzir o consumo de memória do PHP-FPM em 50% ou mais.

Reduza o uso de memória PHP-FPM

Depois de fazer algumas pesquisas na Internet, descobrimos que precisávamos reconfigurar o gerenciador de processos do PHP-FPM e alguns aspectos dele para reduzir o consumo de memória do PHP-FPM no arquivo de configuração do pool. O pool padrão é www e seu arquivo de configuração está localizado em:

Se estiver usando o CentOS, AlmaLinux, Fedora ou RHEL o caminho do PHP-FPM pode ser este:

/etc/php-fpm.d/www.conf

Se estiver usando Debian, Ubuntu ou qualquer distribuição baseada em .deb, é provável que o caminho do PHP-FPM seja este:

/etc/php/7.4/fpm/pool.d/www.conf

Utilize o editor que mais você se familiariza, no meu caso utilizado o nano, mas você pode utilizar o vi, vim e outros, a sintaxe do comando para CentOS, RHEL e outros RPM é:

sudo nano /etc/php-fpm.d/www.conf

E para Ubuntu, Debian e outras .deb é:

sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Se por ventura você estiver usando uma imagem customizada de algum site ou da sua hospedagem de sites, terá que conferir manualmente qual o caminho correto, isso pode variar conforme o sistema e customizações do PHP-FPM.

Encontre as seguintes diretivas e defina seus valores de acordo com seu caso de uso. Para diretivas com comentários, você precisa removê-los.

pm = ondemand
pm.max_children = 80
pm.process_idle_timeout = 10s
pm.max_requests = 200

Vamos explicar resumidamente as diretivas acima e seus valores. A diretiva pm determina como o gerenciador de processos controlará o número de processos filhos. O método padrão é dynamic, o que significa que o número de filhos (processos filhos) é definido dinamicamente dependendo de algumas outras diretivas, incluindo pm.max_children, que define o número máximo de filhos que podem estar vivos ao mesmo tempo.

O gerenciador de processos mais ideal é o esquema ondemand, em que nenhum processo filho é criado na inicialização, mas sim gerado sob demanda. Os processos filhos são bifurcados apenas quando novas solicitações se conectarão com base em pm.max_children e pm.process_idle_timeout, que define o número de segundos após os quais um processo inativo será eliminado.

Por último, mas não menos importante, precisamos definir o parâmetro pm.max_requests, que define o número de solicitações que cada processo filho deve executar antes de re-spawn. Observe que este parâmetro também pode ser usado como uma solução alternativa para vazamentos de memória em bibliotecas de terceiros.

Depois de fazer as configurações acima, percebi que o uso de RAM agora está bom em nosso servidor.

Recomendamos que cada administrador avalie a melhor configuração do PHP-FPM e memória RAM para uso no seu servidor, e portanto, realize as configurações mais adequadas para atender as necessidades de seus usuários.

Segue abaixo mais alguns artigos interessantes para melhorar a administração do seu Linux.

22 dicas de SSH

Como proteger contra ataque de DDOS