Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Guia para Configurar Limites de Recursos no PHP-FPM em VPS Linux: Passo a Passo

15 min de leitura  ·  Guia técnico

Configurar limites de recursos no PHP-FPM é essencial para otimizar o desempenho de aplicações web em servidores VPS Linux. Definir parâmetros como memória máxima, tempo de execução e número de processos evita sobrecarga do servidor e garante estabilidade. Neste guia completo, você aprenderá a configurar corretamente todos os limites do PHP-FPM para maximizar o desempenho do seu VPS.

Pré-requisitos

  • Acesso SSH ao seu servidor VPS Linux com privilégios de root ou sudo
  • PHP-FPM instalado (testado com versões 7.4, 8.0, 8.1 e 8.2)
  • Servidor web configurado (Nginx ou Apache)
  • Conhecimentos básicos de linha de comando Linux
  • Editor de texto como nano ou vim

Entendendo os limites de recursos do PHP-FPM

O PHP-FPM (FastCGI Process Manager) gerencia processos PHP em seu servidor VPS, controlando como os recursos são alocados para cada aplicação web. Configurar corretamente estes limites é fundamental para evitar problemas como uso excessivo de memória, tempos de resposta lentos ou até mesmo quedas do servidor.

Os principais parâmetros que você pode ajustar incluem:

  • pm.max_children: número máximo de processos PHP-FPM que podem ser executados simultaneamente
  • pm.start_servers: quantidade de processos PHP-FPM iniciados automaticamente
  • pm.min_spare_servers: número mínimo de processos ociosos mantidos disponíveis
  • pm.max_spare_servers: número máximo de processos ociosos permitidos
  • pm.max_requests: número máximo de requisições que um processo atenderá antes de ser reiniciado
  • memory_limit: quantidade máxima de memória que um script PHP pode consumir
  • max_execution_time: tempo máximo (em segundos) que um script pode executar

Vamos aprender a configurar cada um desses parâmetros de forma otimizada para seu ambiente VPS.

Localizando e entendendo os arquivos de configuração do PHP-FPM

A otimização dos limites de recursos do PHP-FPM começa pela localização dos arquivos de configuração corretos. Dependendo da distribuição Linux, esses arquivos podem estar em diferentes locais.

Primeiro, vamos identificar onde estão os arquivos de configuração do PHP-FPM:

find /etc -name "php-fpm.conf" -o -name "www.conf"

Na maioria das distribuições, você encontrará:

  • O arquivo principal de configuração em /etc/php/[versão]/fpm/php-fpm.conf
  • Configurações de pool em /etc/php/[versão]/fpm/pool.d/www.conf

Para Ubuntu e Debian, a estrutura típica é:

ls -la /etc/php/8.1/fpm/

Para CentOS e RHEL:

ls -la /etc/php-fpm.d/

Calculando valores ideais para o gerenciamento de processos

A configuração do gerenciamento de processos (PM) do PHP-FPM deve ser baseada nos recursos disponíveis em seu VPS. Vamos calcular valores otimizados para diferentes cenários.

Primeiro, verifique a memória total disponível em seu VPS:

free -m

O resultado será semelhante a:

              total        used        free      shared  buff/cache   available
Mem:           3951         687         867          21        2396        3006
Swap:          2047           0        2047

Agora, determine quanto de memória cada processo PHP-FPM consome em média:

ps -ylC php-fpm --sort:rss

Calcule o valor ideal para pm.max_children usando a fórmula:

pm.max_children = (Total RAM - Memória para o SO e outros serviços) / Memória média por processo PHP-FPM

Por exemplo, para um VPS com 4GB de RAM, reservando 1GB para o sistema e outros serviços, e considerando que cada processo PHP-FPM consome em média 50MB:

pm.max_children = (4096MB - 1024MB) / 50MB = 61.44 ≈ 60

Configurando o pool padrão do PHP-FPM

Vamos editar o arquivo de configuração do pool padrão (geralmente chamado www.conf):

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

Localize a seção de gerenciamento de processos e ajuste os valores conforme calculado:

; Escolha o método de gerenciamento de processos
pm = dynamic

; Número máximo de processos filhos
pm.max_children = 60

; Número de processos filhos criados na inicialização
pm.start_servers = 15

; Número mínimo de processos filhos ociosos
pm.min_spare_servers = 10

; Número máximo de processos filhos ociosos
pm.max_spare_servers = 20

; Número de requisições que cada processo filho atenderá antes de ser reciclado
pm.max_requests = 500

Salve o arquivo e continue com as próximas configurações.

Otimizando limites de memória e tempo de execução

A configuração de limites de memória e tempo de execução é crucial para evitar que scripts problemáticos consumam recursos excessivos do servidor. Vamos ajustar esses parâmetros no arquivo php.ini específico do PHP-FPM:

sudo nano /etc/php/8.1/fpm/php.ini

Localize e ajuste os seguintes parâmetros:

; Limite máximo de memória que um script pode consumir
memory_limit = 256M

; Tempo máximo de execução de um script em segundos
max_execution_time = 60

; Tempo máximo para análise de dados de entrada
max_input_time = 60

; Tamanho máximo de upload de arquivos
upload_max_filesize = 20M

; Tamanho máximo de dados POST
post_max_size = 20M

Atenção: Estes valores são recomendações gerais. Ajuste-os de acordo com as necessidades específicas das suas aplicações. Sites WordPress com muitos plugins podem precisar de limites maiores, enquanto aplicações simples podem funcionar bem com valores menores.

Configurando limites por site com pools personalizados

Uma das grandes vantagens do PHP-FPM é a capacidade de criar pools separados para diferentes sites, cada um com seus próprios limites de recursos. Isso é especialmente útil em VPS que hospedam múltiplos sites com requisitos diferentes.

Vamos criar um pool personalizado para um site específico:

sudo nano /etc/php/8.1/fpm/pool.d/meusite.conf

Adicione a seguinte configuração, ajustando conforme necessário:

[meusite]
user = www-data
group = www-data
listen = /run/php/php8.1-fpm-meusite.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

pm = dynamic
pm.max_children = 30
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 500

; Limites específicos para este site
php_admin_value[memory_limit] = 512M
php_admin_value[max_execution_time] = 120
php_admin_value[upload_max_filesize] = 50M
php_admin_value[post_max_size] = 50M

; Caminho para logs específicos deste site
php_admin_value[error_log] = /var/log/php/meusite-error.log
php_flag[log_errors] = on

Certifique-se de que o diretório de logs existe:

sudo mkdir -p /var/log/php
sudo chown www-data:www-data /var/log/php

Configurando limites de requisições simultâneas e conexões

O gerenciamento adequado de requisições simultâneas é fundamental para manter seu VPS responsivo mesmo durante picos de tráfego. Vamos configurar parâmetros adicionais para controlar esse aspecto.

Edite o arquivo de configuração principal do PHP-FPM:

sudo nano /etc/php/8.1/fpm/php-fpm.conf

Ajuste os seguintes parâmetros na seção [global]:

; Número máximo de requisições simultâneas
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s

; Limite de arquivos abertos
rlimit_files = 4096

; Limite de processos filhos
rlimit_core = unlimited

Para configurar limites de conexão específicos para cada pool, edite o arquivo do pool:

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

Adicione ou ajuste as seguintes linhas:

; Limite de requisições por segundo
request_terminate_timeout = 300
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-www.log

; Limite de conexões por IP
; Descomente e ajuste conforme necessário
;pm.max_requests = 500

Monitorando e ajustando os limites de recursos

Configurar os limites de recursos é apenas o primeiro passo. É igualmente importante monitorar o desempenho do PHP-FPM e ajustar as configurações conforme necessário.

Habilite o status do PHP-FPM para monitoramento:

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

Adicione ou descomente as seguintes linhas:

pm.status_path = /status
ping.path = /ping
ping.response = pong

Configure seu servidor web para acessar essas páginas de status. Para Nginx, adicione ao bloco de servidor:

location ~ ^/(status|ping)$ {
    access_log off;
    allow 127.0.0.1;
    deny all;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Para monitorar o uso de recursos em tempo real, você pode usar ferramentas como:

sudo apt install htop sysstat
htop

Para monitorar especificamente o PHP-FPM:

curl -s http://localhost/status?full

Ajustando limites com base em dados de desempenho

Após monitorar seu servidor por alguns dias, você pode precisar ajustar os limites com base nos dados coletados:

  1. Se o uso de memória estiver consistentemente alto, considere aumentar o valor de memory_limit ou reduzir pm.max_children
  2. Se muitos processos estiverem sendo criados e destruídos frequentemente, ajuste pm.min_spare_servers e pm.max_spare_servers
  3. Se os scripts estiverem atingindo o tempo limite, aumente max_execution_time
  4. Se o servidor estiver lento durante picos de tráfego, considere aumentar pm.max_children (se houver memória disponível)

Problemas comuns e como resolver

Sintoma: Erro "503 Service Temporarily Unavailable"

Causa: Geralmente ocorre quando todos os processos PHP-FPM estão ocupados ou quando o PHP-FPM não está em execução.
Solução: Aumente o valor de pm.max_children e verifique se o serviço PHP-FPM está em execução com sudo systemctl status php8.1-fpm. Se necessário, reinicie o serviço com sudo systemctl restart php8.1-fpm.

Sintoma: Erro "Fatal error: Allowed memory size exhausted"

Causa: O script PHP está tentando usar mais memória do que o permitido pela configuração memory_limit.
Solução: Aumente o valor de memory_limit no php.ini ou no pool específico. Também verifique se há vazamentos de memória no código da aplicação.

Sintoma: Servidor lento ou travando durante picos de tráfego

Causa: Configuração inadequada de pm.max_children ou memory_limit muito alto, permitindo que o PHP-FPM consuma toda a memória disponível.
Solução: Recalcule pm.max_children com base na memória disponível e no consumo médio por processo. Considere adicionar mais RAM ao seu VPS se necessário.

Sintoma: Processos PHP-FPM sendo encerrados pelo sistema (OOM Killer)

Causa: O sistema está ficando sem memória e o kernel Linux está matando processos para liberar recursos.
Solução: Reduza pm.max_children ou aumente a memória do VPS. Verifique os logs do sistema com dmesg | grep -i kill para identificar quais processos estão sendo encerrados.

Sintoma: Tempo de resposta inconsistente

Causa: Número insuficiente de processos PHP-FPM ociosos para lidar com picos de tráfego.
Solução: Aumente pm.start_servers e pm.min_spare_servers para garantir que haja processos suficientes disponíveis para atender novas requisições imediatamente.

Perguntas frequentes sobre limites de recursos no PHP-FPM

Qual é o limite de memória recomendado para PHP-FPM em um VPS com 4GB de RAM?

Para um VPS com 4GB de RAM, recomenda-se configurar o limite de memória do PHP-FPM entre 256MB e 512MB por processo. Esta configuração permite múltiplos processos PHP simultâneos sem esgotar a memória do sistema, mantendo recursos para outros serviços essenciais.

Como identificar se meu site está sofrendo com limites de recursos PHP-FPM inadequados?

Verifique os logs de erro do PHP (/var/log/php-fpm/error.log) buscando mensagens como 'allowed memory size exhausted' ou 'maximum execution time exceeded'. Também observe o uso de memória e CPU no servidor durante picos de tráfego, e monitore se há processos PHP-FPM sendo encerrados abruptamente pelo sistema.

É possível configurar limites diferentes para cada site no mesmo servidor PHP-FPM?

Sim, é possível configurar limites diferentes para cada site criando pools PHP-FPM separados. Cada pool pode ter suas próprias configurações de memória, tempo de execução e número máximo de processos, permitindo alocar mais recursos para sites críticos e limitar sites menos importantes.

Qual é a diferença entre configurar limites no php.ini e no pool do PHP-FPM?

As configurações no php.ini aplicam-se globalmente a todas as instâncias PHP, incluindo CLI, enquanto as configurações no pool do PHP-FPM (www.conf ou arquivos personalizados em pool.d/) aplicam-se apenas aos processos daquele pool específico. Para controle granular em ambiente de produção, priorize as configurações no nível do pool.

Com que frequência devo revisar e ajustar os limites de recursos do PHP-FPM?

Recomenda-se revisar os limites de recursos do PHP-FPM a cada 3-6 meses ou após mudanças significativas como: atualizações de aplicações, aumento de tráfego, migração de conteúdo ou adição de plugins/extensões. Também monitore regularmente o uso de recursos para identificar tendências e ajustar proativamente antes que problemas ocorram.

Conclusão

  • A configuração adequada dos limites de recursos do PHP-FPM é essencial para garantir o desempenho e a estabilidade de aplicações web em servidores VPS Linux.
  • Ajuste os parâmetros com base nos recursos disponíveis em seu VPS e nas necessidades específicas de suas aplicações, monitorando regularmente o desempenho para fazer ajustes quando necessário.
  • Utilize pools separados para diferentes sites quando possível, permitindo uma alocação mais eficiente de recursos e isolamento entre aplicações.

Lembre-se de que não existe uma configuração universal ideal para todos os cenários. A otimização dos limites de recursos do PHP-FPM é um processo contínuo que deve ser ajustado conforme sua aplicação evolui e seus padrões de tráfego mudam.

Precisa de ajuda com a otimização do seu servidor VPS?

Configurar corretamente os limites de recursos do PHP-FPM pode ser desafiador, especialmente para ambientes de produção com requisitos específicos. A AviraHost oferece servidores VPS otimizados e suporte técnico especializado para garantir o melhor desempenho para suas aplicações.

Conheça nossos planos de Servidor VPS

  • 0 Usuários acharam útil
  • php-fpm, vps, linux, otimização, performance, servidor, configuração, avirahost
Esta resposta lhe foi útil?

Artigos Relacionados

Como usar o Filezilla como software FTP da minha Hospedagem?

Como usar o Filezilla como software FTP da minha Hospedagem? O FileZilla é um dos mais populares...

Conectando remotamente ao MySQL - cPanel

Você pode permitir servidores externos a acessar suas bases de dados MySQL através do IP na lista...

Como redirecionar um site http para https?

Para redirecionar um site http para https, basta adicionar as linhas abaixo no seu arquivo...

Como acessar o painel de gerenciamento dos meus Serviços.

Para acessar o painel de gerenciamento do seu serviço basta seguir o passo á passo abaixo.   1....

Como gerenciar um domínio.

Adicione um domínio a sua conta, utilizando nosso painel de gerenciar domínios, Você pode...