Artigo Diretório
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.

Como saber se o PHP-FPM está sobrecarregado?
pode usar top 或 htop 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-fpmOtimize 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?
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.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.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.slowtail -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-fpmHabilitar 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<版本>-fpmEfeito? 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.
Esperamos que o artigo "HestiaCP PHP-FPM Overload? Dynamic Webpage 500 Error? This Optimization Method Will Show Immediate Results!" compartilhado no blog de Chen Weiliang ( https://www.chenweiliang.com/ ) seja útil para você.
Sinta-se à vontade para compartilhar o link deste artigo: https://www.chenweiliang.com/cwl-32512.html

