HestiaCP PHP-FPM está baixo unha gran carga? Erro na páxina web dinámica 500? Esta optimización entrará en vigor inmediatamente!

Encontrácheste algunha vez con esta situación?O acceso ao sitio web diminuíu de súpeto ou mesmo provocou un erro 500 Despois de reiniciar PHP-FPM, volveu á normalidade., pero o problema reaparece despois dun tempo? Isto é tan frustrante!

Por que sucede isto?De feito, isto adoita serO grupo de procesos PHP-FPM non está configurado correctamente ou os recursos do servidor son insuficientes.causada por. Hoxe, imos optimizar a fondo HestiaCP PHP-FPM baixo o capó fai que o sitio web sexa tan estable coma unha roca.

O principal motivo polo que PHP-FPM está sobrecargado

PHP-FPM é unXestor de Procesos, que se encarga de xestionar as solicitudes dinámicas. Se a configuración non é razoable, pode levar a:

  • Os recursos do servidor están esgotados, facendo que PHP-FPM non poida responder a novas solicitudes de forma oportuna;
  • Procesos moi poucos, cando o tráfico aumenta de súpeto, non se pode procesar a tempo;
  • O uso do proceso é demasiado alto, facendo que a carga da CPU explote.

HestiaCP PHP-FPM está baixo unha gran carga? Erro na páxina web dinámica 500? Esta optimización entrará en vigor inmediatamente!

Como saber se PHP-FPM está sobrecargado?

pode usar tophtop Comando para ver o uso da CPU e da memoria:

top -c

Se ves información de proceso similar á seguinte, significa que PHP-FPM está a executarse con 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

Ves como estes procesos están ocupando máis do 70% da CPU? Se isto ocorre con frecuencia, o teu PHP-FPM Debe haber un problema!

Entón, como podemos optimizar a configuración PHP-FPM para que o servidor xa non estea sobrecargado?

Optimización do grupo de procesos PHP-FPM (axuste de parámetros básicos)

Primeiro, abre php-fpm Ficheiros de configuración:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Cambia á túa versión de PHP, como PHP8.3, e cámbiaa a isto:/etc/php/8.3/fpm/pool.d/www.conf

Consultar a versión de PHP establecida por HestiaCP

v-list-web-domain user domain.com

Por exemplo:

v-list-web-domain abc chenweiliang.com

Na saída, verás algo así como:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Isto significa que o sitio web usa PHP 8.3.

Vexamos a túa configuración de PHP-FPM:

[chenweiliang.com]
listen = /run/php/php8.3-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

Podes ver que o teu pm O que se usa é ondemand,Aínda que pode reducir o uso de recursos durante o tempo de inactividade, cando o tráfico aumenta de súpeto, é posible que o proceso non poida responder a tempo., resultando nun erro 500.

1. Axuste os parámetros do grupo de procesos PHP-FPM

Se a configuración usa dynamicEste é un método para iniciar previamente algúns procesos de traballo e axustalos dinamicamente segundo o volume de solicitudes, o que pode responder máis rápido cando o volume de solicitudes aumenta repentinamente.

Para sitios web con certa cantidade de tráfico, recoméndase usar pm = dynamicPorque pode manter unha certa cantidade de procesos inactivos e evitar 500 erros durante a alta concorrencia.

Recoméndase usalo só cando o volume de acceso sexa extremadamente baixo e os recursos de memoria sexan axustados. pm = ondemand Para aforrar recursos.

Suxerido cambiar a ondemand, e optimizar 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 queres cambialo así?

  • pm = dynamic: Asigne os procesos de forma máis flexible para evitar a espera de solicitudes que pode ser causada pola demanda;
  • pm.max_children = 16: Evita 500 erros causados ​​por moi poucos procesos;
  • pm.start_servers = 5: Evite o inicio lento do proceso;
  • pm.max_requests = 3000:Prevención de fugas de memoria, recicla o proceso regularmente.

2. Limite o tempo de execución dos scripts PHP para evitar a ocupación a longo prazo

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

Isto pode evitar algúnsOs scripts PHP que usan demasiada CPU poden derrubar o teu servidor.

Despois de gardar, reinicie o proceso PHP:

sudo systemctl restart php8.3-fpm

Activa o seguimento do estado de PHP-FPM para facer un seguimento do progreso en calquera momento

Active o seguimento do proceso PHP-FPM e visualízao en calquera momentoNúmero actual de procesos activos e estado de espera da solicitude, para evitar a sobrecarga do servidor.

en php-fpm.conf Engadido en:

pm.status_path = /status

Entón, configuración de 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;
}

Deste xeito, podes http://yourdomain.com/status Consulte PHP-FPM en acción!

Optimice os rexistros PHP-FPM para solucionar problemas rapidamente

en php-fpm.conf Engadir a:

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 的脚本记录到日志

Deste xeito, sempre que se produza un erro 500, pode ver directamente o rexistro:

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

Vexa se PHP informa un erro, como out of memory,script execution timeout Agarda.

Reinicie PHP-FPM regularmente para evitar fugas de memoria

capaz de pasar cron Reinicie PHP-FPM regularmente para evitar que os procesos de longa duración causenFugas de memoria.

crontab -e

Engade a seguinte tarefa programada para reiniciar automaticamente PHP-FPM ás 3 da mañá todos os días:

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

E se o problema persiste? Máis optimización!

Se aínda segues a optimización anteriorÁs veces ocorren 500 erros, pode continuar coas seguintes optimizacións:

1. Activa OPcache para mellorar a eficiencia da execución de PHP

Se OPcache aínda non está activado, podes instalalo así (usando Ubuntu como exemplo):

sudo apt install php8.3-opcache -y

Despois edita php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1

Efecto? A velocidade de execución da páxina PHP mellorouse moito!

2. Optimización da configuración de Nginx

Asegúrese de que os parámetros relacionados con Nginx sexan razoables, como fastcgi_read_timeout Axústao adecuadamente para evitar que Nginx finalice os scripts PHP debido ao longo tempo de execución:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Resumo: optimiza PHP-FPM e o sitio web xa non fallará.

Que axustes fixemos despois desta optimización?

✅ Optimización do conxunto de procesos PHP-FPM, usar ondemandE optimizar pm.max_children parámetro;
Limitar o tempo de execución de scripts PHP, para evitar a ocupación da CPU a longo prazo;
Activar a monitorización PHP-FPM, ver a carga do proceso en tempo real;
Optimización de rexistros PHP-FPM, solucione rapidamente 500 erros;
Reinicie PHP-FPM regularmente, evitar fugas de memoria;
Activa OPcache, mellorar a eficiencia da execución de PHP;
Optimización da configuración de Nginx, para evitar problemas de tempo de espera.

Despois desta optimización, a carga PHP-FPM reducirase moito e o funcionamento do sitio web será máis estable. 🔥

Vai probalo agora! 💪🚀

发表 评论

O teu enderezo de correo electrónico non será publicado. Utilízanse os campos obrigatorios * Etiqueta

Volver arriba