O HestiaCP PHP-FPM está sob carga pesada? Erro 500 de página web dinâmica? Esta otimização entrará em vigor imediatamente!

Você já se deparou com essa situação? Seu site de repente fica lento ou até mesmo exibe um erro 500. Reiniciar o PHP-FPM resolve o problema , mas ele reaparece depois de um tempo? É extremamente frustrante!

Por que isso acontece? Na verdade, geralmente é causado por uma configuração incorreta do pool de processos do PHP-FPM ou por recursos insuficientes do servidor . Hoje, vamos otimizar completamente o PHP-FPM no HestiaCP para garantir a estabilidade absoluta do seu site!

A principal razão pela qual o PHP-FPM está sobrecarregado

O PHP-FPM é o gerenciador de processos do PHP , responsável por lidar com requisições dinâmicas. Uma configuração inadequada pode levar a:

  • Os recursos do servidor estão esgotados, fazendo com que o PHP-FPM não consiga responder a novas solicitações em tempo hábil;
  • Poucos processos, quando o tráfego aumenta repentinamente, ele não pode ser processado a tempo;
  • O uso do processo é muito alto, fazendo com que a carga da CPU exploda.

O HestiaCP PHP-FPM está sob carga pesada? Erro 500 de página web dinâmica? Esta otimização entrará em vigor imediatamente!

Como saber se o PHP-FPM está sobrecarregado?

pode usar tophtop Comando para visualizar o uso da CPU e da memória:

top -c

Se você vir informações de processo semelhantes às seguintes, significa que o PHP-FPM está sendo executado sob alta carga:

1669293 abc     20   0  790284 227880 185568 R  73.1   0.9   1:30.09 php-fpm: pool chenweiliang.com                                                    
1669522 abc     20   0  801924 224224 170236 R  69.9   0.9   0:59.01 php-fpm: pool chenweiliang.com

Você observa esses processos utilizando mais de 70% da CPU? Se isso acontece com frequência, definitivamente há algo errado com o seu PHP-FPM!

Então, como podemos otimizar a configuração do PHP-FPM para que o servidor não fique mais sobrecarregado?

Otimização do pool de processos PHP-FPM (ajuste de parâmetros principais)

Primeiro, abra php-fpm Arquivo de configuração:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Mude para sua versão do PHP, como PHP8.5, e altere para isto:/etc/php/8.3/fpm/pool.d/www.conf

Consultar a versão do PHP definida pelo HestiaCP

v-list-web-domain user domain.com

例如:

v-list-web-domain abc chenweiliang.com

Na saída, você verá algo como:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.5 

Isso indica que o site usa PHP 8.5.

Vamos dar uma olhada na sua configuração PHP-FPM:

[chenweiliang.com]
listen = /run/php/php8.5-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660

user = abc
group = abc

pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s

Você pode ver que seu pm O usado é ondemand,Embora possa reduzir o uso de recursos durante o tempo ocioso, quando o tráfego aumenta repentinamente, o processo pode não conseguir responder a tempo., resultando em um erro 500.

www.conf: O "pool de recursos universal" integrado ao sistema

Após instalar o PHP-FPM, o sistema fornecerá automaticamente um... www.conf Arquivo.
EstáPosicionamentoÉ muito simples: trata-se apenas de um pool de processos padrão que funciona imediatamente, geralmente associado a... www-dados Download do usuário.

Este tipo de pool é particularmente adequado para ambientes de site único: a configuração é leve e os parâmetros são todos modelos genéricos, como:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5

Se você hospedar apenas um site, poderá usá-lo de forma direta e confiável, sem complicações adicionais.

etufo.org.conf: Pool personalizado

Quando você está gerenciando vários sites, não é possível manter todos os usuários no mesmo grupo.
Neste ponto, o HestiaCP criará automaticamente um pool separado para cada site, por exemplo... etufo.org.confEspecializado em nomes de domínio etufo.org 服务。

A forma mais comum de jogar é:

  • Alterar usuários e grupos:user = etufo,group = etufo
  • Monitoramento independente:listen = /run/php/etufo.sock
  • Ajustar o número de processos garante a estabilidade da estrutura rochosa mesmo sob alta concorrência.
  • Arquivos de registro separados facilitam a resolução de problemas.

Os benefícios são óbvios: isolamento seguro . Mesmo que um dos sites seja comprometido, os outros permanecem ilesos.

dummy.conf: arquivo fictício

dummy.conf Geralmente, são exemplos ou modelos fornecidos pelo sistema.
Ele não funcionará a menos que você o modifique e habilite manualmente.
Sua importância se assemelha mais à de um "manual de instruções", que ensina como criar uma nova configuração de pool.

Por que dividir a piscina?

  • 安全 性Use usuários diferentes para sites diferentes para evitar conflitos de permissões.
  • 性能优化O número de processos pode ser ajustado individualmente para cada pool, permitindo ajustes flexíveis com base na demanda de tráfego.
  • IsolamentoOs registros, erros e endereços de escuta são todos separados, facilitando a resolução de problemas.

Por exemplo, mesmo que o www.conf falhe, o etufo.org.conf continuará funcionando normalmente e não derrubará todo o servidor.

实际场景

  • Servidor de site únicoO arquivo www.conf é suficiente.
  • Servidor multisiteCada site possui seu próprio arquivo .conf independente, como por exemplo, etufo.org.conf.
  • dummy.confApenas para referência, não recomendado.

Comparação de configurações

www.conf (pool padrão)

[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5

etufo.org.conf (Pool personalizado)

[etufo.org]
user = etufo
group = etufo
listen = /run/php/etufo.sock
pm = dynamic
pm.max_children = 20
access.log = /var/log/php-fpm/etufo.access.log

As principais diferenças são: identidade do usuário, endereço de escuta e número de processos.

1. Ajuste os parâmetros do pool de processos PHP-FPM

Se a configuração usar dynamicEste é um método de pré-iniciar alguns processos de trabalho e ajustá-los dinamicamente de acordo com o volume de solicitações, o que pode responder mais rapidamente quando o volume de solicitações aumenta repentinamente.

Para sites com um certo volume de tráfego, é recomendável usar pm = dynamicPorque ele pode manter uma certa quantidade de processos ociosos e evitar 500 erros durante alta simultaneidade.

É recomendável usá-lo somente quando o volume de acesso for extremamente baixo e os recursos de memória forem limitados. pm = ondemand Para economizar recursos.

Sugerido para dynamic, e otimizar pm.max_children E outros parâmetros:

pm = dynamic
pm.max_children = 16  ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4   ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2  ; 最小空闲进程数
pm.max_spare_servers = 7  ; 最大空闲进程数
pm.max_requests = 3000    ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s  ; 空闲进程 10s 后自动退出

Por que você quer mudar isso desse jeito?

  • pm = dynamic: Alocar processos de forma mais flexível para evitar espera de solicitações que pode ser causada por demanda;
  • pm.max_children = 16: Prevenir 500 erros causados ​​por poucos processos;
  • pm.start_servers = 5: Evite inicialização lenta de processos;
  • pm.max_requests = 3000:Prevenção de vazamentos de memória, recicle o processo regularmente.

2. Limite o tempo de execução de scripts PHP para evitar ocupação de longo prazo

request_terminate_timeout = 30s  ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M  ; 限制 PHP 进程最大内存占用

Isso impede que certos scripts PHP que consomem CPU em excesso causem a falha do servidor.

Após salvar, reinicie o processo PHP:

sudo systemctl restart php8.3-fpm

Otimize o PHP-FPM com base na configuração do VPS.

Exemplo de configuração de VPS:

  • Descrição: VPS 3 NVMe
  • Espaço em disco: 300 GB
  • Núcleos de CPU: 8
  • RAM: 24 GB

Com base na configuração do seu VPS ( 8 núcleos de CPU, 24 GB de RAM ), os recursos do seu servidor são mais do que suficientes. Para o PHP-FPM, 24 GB de RAM permitem configurar um número muito alto de processos simultâneos.

Em um ambiente de produção, normalmente alocamos memória suficiente (digamos, de 8 GB a 12 GB) para o próprio sistema, bancos de dados Apache (como MySQL /MariaDB) e caches (como Redis / Memcached ), deixando os 12 GB a 16 GB restantes de memória para serem totalmente alocados ao PHP-FPM.

Considerando um consumo médio de memória de 40 MB a 60 MB por processo PHP , 1 GB de memória pode executar aproximadamente de 16 a 25 processos.

A seguir, apresentamos uma configuração FPM de alta concorrência e alto desempenho, personalizada para você , que pode melhorar significativamente a capacidade do WordPress e evitar travamentos devido a picos repentinos de tráfego:

pm = dynamic

; 允许的最大 PHP 进程数(12GB 内存 / 40MB ≈ 300)
; 8核CPU搭配300个进程,可以轻松应对极高并发,且不至于让内存溢出
pm.max_children = 300

; 启动时创建的初始进程数(CPU核心数 * 4)
pm.start_servers = 32

; 维持的最小空闲进程数(服务器空闲时保留的进程,保证随时响应)
pm.min_spare_servers = 16

; 维持的最大空闲进程数(超过这个数量的空闲进程会被释放)
pm.max_spare_servers = 64

; 每个进程处理1000个请求后自动重启,高配置服务器可适当调大,有效防止WP插件内存泄露
pm.max_requests = 1000

; 单个请求最大执行时间,超时60秒强杀,防止死锁卡死
request_terminate_timeout = 60s

; 慢日志路径及触发阈值(请求超过5秒则记录,用于排查性能瓶颈)
slowlog = /var/log/php8.5-fpm.log.slow
request_slowlog_timeout = 5s

💡 Por que essa configuração?

  1. pm.max_children = 300Esta é uma otimização essencial. Sua configuração anterior de 50 processos era muito conservadora para 24 GB de memória. Ao encontrar picos repentinos de tráfego (ou bots inundando o sistema em segundo plano), 50 processos seriam instantaneamente sobrecarregados, causando timeouts de conexão. Aumentar para 300 pode melhorar a capacidade de processamento simultâneo do seu servidor várias vezes.
  2. pm.start_servers / `min_servidores_reservaComo você possui 8 núcleos de CPU, inicialmente e normalmente consegue manter mais processos ociosos, o que permite aproveitar a vantagem de múltiplos núcleos para que novas solicitações possam ser abertas instantaneamente, sem esperar pela criação de processos.
  3. pm.max_requests = 1000Aumente de 500 para 1000. Sua memória é grande e os processos não precisam ser reiniciados com frequência. Aumentar para 1000 pode reduzir o consumo de CPU causado pela frequente destruição e criação de processos.

Veja o registro de lentidão:

tail -f /var/log/php8.5-fpm.log.slow
tail -f /var/log/php8.4-fpm.log.slow

Após efetuar as alterações, lembre-se de reiniciar o serviço PHP-FPM para que as alterações entrem em vigor.

systemctl restart php8.5-fpm

Habilitar o monitoramento de status do PHP-FPM para acompanhar o progresso a qualquer momento

Habilitar o monitoramento de processos do PHP-FPM permite visualizar o número de processos ativos e o status de espera das requisições a qualquer momento , evitando a sobrecarga do servidor.

php-fpm.conf Adicionado em:

pm.status_path = /status

Então, configuração do Nginx:

location /status {
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    allow 127.0.0.1;
    deny all;
}

Desta forma, você pode http://yourdomain.com/status Confira o PHP-FPM em ação!

Otimize os logs PHP-FPM para solucionar problemas rapidamente

php-fpm.conf Resposta:

php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s  ; 执行超过 5s 的脚本记录到日志

Dessa forma, sempre que ocorrer um erro 500, você poderá visualizar diretamente o log:

tail -f /var/log/php-fpm/error.log

Veja se o PHP relata um erro, como out of memory,script execution timeout Espere

Reinicie o PHP-FPM regularmente para evitar vazamentos de memória

capaz de passar cron Reinicie o PHP-FPM regularmente para evitar que processos de longa duração causemVazamentos de memória.

crontab -e

Adicione a seguinte tarefa agendada para reiniciar automaticamente o PHP-FPM às 3 da manhã todos os dias:

0 3 * * * /usr/sbin/service php8.5-fpm restart

E se o problema persistir? Mais otimização!

Se você ainda encontrar ocasionalmente um erro 500 após seguir as otimizações acima , poderá prosseguir com as seguintes otimizações:

1. Habilite o OPcache para melhorar a eficiência da execução do PHP

Se o OPcache ainda não estiver habilitado, você pode instalá-lo assim (usando o Ubuntu como exemplo):

sudo apt install php8.5-opcache -y

Então edite php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • Desativar detecção em tempo realReduzir as operações de entrada/saída do sistema de arquivos e melhorar o desempenho.
  • No entanto, isso significa que você deve limpar o cache manualmente (reiniciar o serviço PHP) após modificar os arquivos PHP.

Após modificar a configuração, você deve reiniciar o serviço PHP para que as alterações entrem em vigor.

sudo systemctl restart php<版本>-fpm

Efeito? A velocidade de execução da página PHP foi bastante melhorada!

2. Otimização da configuração do Nginx

Certifique-se de que os parâmetros relacionados ao Nginx sejam razoáveis, como fastcgi_read_timeout Ajuste-o adequadamente para evitar que scripts PHP sejam encerrados pelo Nginx devido ao longo tempo de execução:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Resumo: Otimize o PHP-FPM e o site não travará mais!

Que ajustes fizemos depois dessa otimização?

✅ Otimizando o pool de processos PHP-FPM,usar ondemandE otimizar pm.max_children parâmetro;
Limitando o tempo de execução de scripts PHP, para evitar ocupação prolongada da CPU;
Habilitar monitoramento PHP-FPM, visualize a carga do processo em tempo real;
Otimizando logs PHP-FPM, solucionar rapidamente 500 erros;
Reinicie o PHP-FPM regularmente, evitar vazamentos de memória;
Habilitar OPcache, melhorar a eficiência de execução do PHP;
Otimizando a configuração do Nginx, para evitar problemas de tempo limite.

Após essa otimização, a carga do PHP-FPM será bastante reduzida e a operação do site ficará mais estável! 🔥

Experimente agora mesmo! 💪🚀

Se você ainda deseja aprender mais sobre como personalizar modelos PHP-FPM com o HestiaCP, este artigo lhe proporcionará uma compreensão mais aprofundada:

👉 Modelo PHP-FPM personalizado do HestiaCP: Segredos de otimização de desempenho do PHP 8.5 ▼

Neste conteúdo, você verá:

  • Técnicas de otimização para alta concorrência: como melhorar a velocidade de resposta por meio de uma configuração de processo adequada.
  • Solução de isolamento de segurança: Evite riscos de acesso entre sites e garanta a estabilidade da conta.
  • Registros e monitoramento: Utilize registros lentos para localizar gargalos e otimizar continuamente o desempenho do site.

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Voltar ao Topo