Como impedir que o PHP-FPM consulte muita RAM no Linux

Como impedir que o PHP-FPM consulte muita RAM no Linux

Se você implantou um Lemp (Linux, Nginx, Mysql/mariadb, e Php) empilhe, então você provavelmente está usando Fastcgi proxying interior Nginx (como um servidor HTTP), para processamento PHP. PHP-FPM (um acrônimo de Gerenciador de processos FastCGI) é uma alternativa amplamente usada e de alto desempenho Php fastcgi implementação.

Aqui estão os guias úteis sobre a configuração Pilha lemp em Linux.

  • Como instalar pilha Lemp com phpmyadmin no Ubuntu 20.04
  • Como instalar o servidor Lemp no CentOS 8
  • Como instalar o Lemp no Debian 10 Server

Recentemente, todo o nosso Php sites em um dos nossos Lemp Os servidores da web ficaram lentos e acabaram de responder ao login no servidor. Descobrimos que o sistema estava com pouca RAM: PHP-FPM havia consumido a maior parte da RAM, conforme indicado na captura de tela a seguir (Ferramenta de monitoramento do sistema de olhares).

$ GANCES 
Olhos - Ferramenta de monitoramento do sistema

Neste artigo, mostraremos como prevenir PHP-FPM de consumir muito ou toda a memória do seu sistema (BATER) no Linux. No final deste guia, você aprenderá a reduzir PHP-FPM consumo de memória em 50% ou mais.

Reduza o uso da memória php-fpm

Depois de fazer algumas pesquisas na internet, descobrimos que precisávamos reconfigurar o PHP-FPM Gerenciador de processos e certos aspectos 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 (sobre CENTOS/RHEL/FEDORA) ou /etc/php/7.4/fpm/piscina.d/www.conf (sobre Ubuntu/Debian/Mint).

$ sudo vim /etc /php-fpm.d/www.conf [em centos/rhel/fedora] $ sudo vim/etc/php/7.4/fpm/piscina.d/www.conf [no Ubuntu/Debian/Mint] 

Encontre as seguintes diretivas e defina seu valor para se adequar ao seu caso de uso. Para as diretivas que são 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. O PM A diretiva determina como o gerenciador de processos controlará o número de processos infantis. O método padrão é dinâmico, o que significa que o número de crianças (processos infantis) é definido dinamicamente, dependendo de algumas outras diretrizes, incluindo PM.max_children que define o número máximo de crianças que podem estar vivas ao mesmo tempo.

O gerente de processo mais ideal é o Sob demanda Esquema onde nenhum processo infantil é criado na startup, mas são gerados sob demanda. Os processos infantis são apenas bifurcados quando novas solicitações se conectarão com base no PM.max_children e PM.process_idle_timeout que define o número de segundos após o qual um processo ocioso será morto.

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

Referência: Uma maneira melhor de executar o php-fpm.

Depois de fazer essas configurações acima, notei BATER O uso agora está bem em nosso servidor. Você tem algum pensamento para compartilhar relacionado a este tópico ou perguntas? Chegue -nos através do formulário de feedback abaixo.