Pesquisa de site

Como evitar que o PHP-FPM consuma muita RAM no Linux


Se você implantou um LEMP (Linux, NGINX, MySQL/MariaDB e PHP), então provavelmente você está usando o proxy FastCGI dentro do 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 utilizada e de alto desempenho.

Aqui estão os guias úteis sobre como configurar o LEMP Stack no Linux.

  • Como instalar o LEMP Stack com PhpMyAdmin no Ubuntu 20.04
  • Como instalar o servidor LEMP no CentOS 8
  • Como instalar o LEMP no servidor Debian 10

Recentemente, todos os nossos sites PHP em um de nossos servidores LEMP ficaram lentos e eventualmente pararam de responder ao fazer login no servidor. descobrimos que o sistema estava com pouca RAM: PHP-FPM consumiu a maior parte da RAM, conforme indicado na captura de tela a seguir (relances – ferramenta de monitoramento do sistema).

glances

Neste artigo, mostraremos como evitar que o PHP-FPM consuma muita ou toda a memória do sistema (RAM) no Linux. No final deste guia, você aprenderá como reduzir o consumo de memória 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 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 /etc/php-fpm.d/www.conf (em CentOS/RHEL/Fedora) ou /etc/php/7.4/fpm/pool.d/www.conf (no Ubuntu/Debian/Mint).

sudo vim /etc/php-fpm.d/www.conf             [On CentOS/RHEL/Fedora]
sudo vim /etc/php/7.4/fpm/pool.d/www.conf    [On Ubuntu/Debian/Mint]

Encontre as diretivas a seguir e defina seus valores de acordo com seu caso de uso. Para diretivas comentadas, você precisa descomentá-las.

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

Vamos explicar brevemente 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 pode estar vivo ao mesmo tempo.

O gerenciador de processos ideal é o esquema ondemand, onde nenhum processo filho é criado na inicialização, mas é gerado sob demanda. Os processos filhos só são bifurcados quando novas solicitações se conectam com base em pm.max_children e pm.process_idle_timeout, que definem o número de segundos após os quais um processo ocioso 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 renascer. Observe que esse parâmetro também pode ser usado como 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. Você tem alguma opinião para compartilhar relacionada a este tópico ou perguntas? Entre em contato conosco através do formulário de feedback abaixo.