¿HestiaCP PHP-FPM está bajo mucha carga? ¿Error 500 en página web dinámica? ¡Esta optimización tendrá efecto inmediatamente!

¿Alguna vez te has encontrado en esta situación?El acceso al sitio web se ralentizó repentinamente o incluso generó un error 500. Después de reiniciar PHP-FPM, volvió a la normalidad.¿Pero el problema vuelve a aparecer después de un tiempo? ¡Esto es tan frustrante!

¿Por qué está pasando esto?De hecho, esto suele ser así.El grupo de procesos PHP-FPM no está configurado correctamente o los recursos del servidor son insuficientes.causado por. Hoy optimizaremos a fondo hestiacp ¡La instalación de PHP-FPM hace que el sitio web sea tan estable como una roca!

La razón principal por la que PHP-FPM está sobrecargado

PHP-FPM es unGerente de procesos, que es responsable de gestionar las solicitudes dinámicas. Si la configuración no es razonable, puede provocar:

  • Los recursos del servidor están agotados, lo que provoca que PHP-FPM no pueda responder a nuevas solicitudes de manera oportuna;
  • Muy pocos procesos, cuando el tráfico aumenta repentinamente, no se puede procesar a tiempo;
  • El uso del proceso es demasiado alto, provocando que la carga de la CPU explote.

¿HestiaCP PHP-FPM está bajo mucha carga? ¿Error 500 en página web dinámica? ¡Esta optimización tendrá efecto inmediatamente!

¿Cómo saber si PHP-FPM está sobrecargado?

puedo usar tophtop Comando para ver el uso de CPU y memoria:

top -c

Si ve información de proceso similar a la siguiente, significa que PHP-FPM se está ejecutando bajo 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 cómo estos procesos ocupan más del 70% de la CPU? Si esto sucede a menudo, su PHP-FPM Debe haber un problema!

Entonces, ¿cómo podemos optimizar la configuración de PHP-FPM para que el servidor ya no se sobrecargue?

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

Primero, abre php-fpm Archivo de configuración:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Cambie a su versión de PHP, como PHP8.3, y cámbiela a esto:/etc/php/8.3/fpm/pool.d/www.conf

Consultar la versión de PHP establecida por HestiaCP

v-list-web-domain user domain.com

例如:

v-list-web-domain abc chenweiliang.com

En la salida verás algo como:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Esto significa que el sitio web utiliza PHP 8.3.

Echemos un vistazo a su configuración 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

Puedes ver que tu pm El usado es ondemand,Si bien puede reducir el uso de recursos durante el tiempo de inactividad, cuando el tráfico aumenta repentinamente, es posible que el proceso no pueda responder a tiempo., lo que da como resultado un error 500.

www.conf: El "conjunto de recursos universales" integrado del sistema.

Tras instalar PHP-FPM, el sistema le proporcionará automáticamente un... www.conf archivo.
suPosicionamientoEs muy sencillo: se trata simplemente de un grupo de procesos predeterminado que funciona de forma inmediata, normalmente adjunto a... www-data Descarga del usuario.

Este tipo de grupo es especialmente adecuado para entornos de un solo sitio: la configuración es sencilla y los parámetros son plantillas genéricas, como por ejemplo:

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

Si solo alojas un sitio web, puedes usarlo directamente y de forma fiable sin complicaciones adicionales.

etUfo.org.conf: Grupo personalizado

Una vez que gestionas varios sitios web, no puedes mantener a todos metidos en el mismo grupo.
En este punto, HestiaCP creará automáticamente un pool independiente para cada sitio, por ejemplo... etUfo.org.confEspecializados en nombres de dominio etufo.org 服务。

La forma habitual de jugar es:

  • Cambiar usuarios y grupos:user = etufo,group = etufo
  • Supervisión independiente:listen = /run/php/etufo.sock
  • Ajustar el número de procesos garantiza una estabilidad sólida como una roca incluso con una alta concurrencia.
  • Los archivos de registro separados facilitan la resolución de problemas.

Los beneficios son obvios:Aislamiento seguroAunque un sitio web se vea comprometido, los demás no se verán afectados.

dummy.conf: archivo ficticio

archivo de configuración ficticio Suelen ser ejemplos o plantillas proporcionadas por el sistema.
En realidad no funcionará a menos que lo modifiques y habilites manualmente.
Su importancia radica más bien en ser un "manual de operaciones", que te indica cómo escribir una nueva configuración de grupo.

¿Por qué dividir la piscina?

  • 安全 性Utilice usuarios diferentes para sitios diferentes para evitar conflictos de permisos.
  • El hombre que se enamoraEl número de procesos se puede ajustar individualmente para cada grupo, lo que permite realizar ajustes flexibles en función de la demanda de tráfico.
  • AislamientoLos registros, los errores y las direcciones de escucha están separados, lo que facilita la resolución de problemas.

Por ejemplo: incluso www.conf Se derrumbó.etufo.org.conf Seguirá funcionando con normalidad y no provocará la caída de todo el servidor.

实际场景

  • Servidor de sitio único: www.conf es suficiente.
  • Servidor multisitioCada sitio tiene su propio archivo .conf independiente, como por ejemplo etufo.org.conf.
  • archivo de configuración ficticioSolo como referencia, no recomendado.

Comparación de configuraciones

www.conf (grupo predeterminado)

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

etufo.org.conf (Grupo 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

La principal diferencia es:Identidad del usuario, dirección de escucha, número de procesos.

1. Ajuste los parámetros del grupo de procesos PHP-FPM

Si la configuración utiliza dynamicSe trata de un método para preiniciar algunos procesos de trabajo y ajustarlos dinámicamente según el volumen de solicitudes, lo que permite responder más rápido cuando el volumen de solicitudes aumenta repentinamente.

Para sitios web con una cierta cantidad de tráfico, se recomienda utilizar pm = dynamicPorque puede mantener una cierta cantidad de procesos inactivos y evitar errores 500 durante alta concurrencia.

Se recomienda usarlo solo cuando el volumen de acceso sea extremadamente bajo y los recursos de memoria sean limitados. pm = ondemand Para ahorrar recursos.

Se sugiere cambiar a dynamic, y optimizar pm.max_children Y otros 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 qué quieres cambiarlo así?

  • pm = dynamic:Asignar procesos de forma más flexible para evitar esperas de solicitudes que pueden ser causadas por el ondemand;
  • pm.max_children = 16:Evitar errores 500 causados ​​por muy pocos procesos;
  • pm.start_servers = 5:Evitar el inicio lento del proceso;
  • pm.max_requests = 3000:Cómo prevenir fugas de memoria, reciclar el proceso periódicamente.

2. Limite el tiempo de ejecución de los scripts PHP para evitar la ocupación a largo plazo

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

Esto puede prevenir algunosLos scripts PHP que utilizan demasiada CPU pueden hacer caer su servidor.

Después de guardar, reinicie el proceso PHP:

sudo systemctl restart php8.3-fpm

Habilite la supervisión del estado de PHP-FPM para realizar un seguimiento del progreso en cualquier momento

Habilite la supervisión del proceso PHP-FPM y visualícela en cualquier momentoNúmero actual de procesos activos y estado de espera de solicitudes, para evitar la sobrecarga del servidor.

php-fpm.conf Agregado en:

pm.status_path = /status

Luego, 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;
}

De esta manera, puedes http://yourdomain.com/status ¡Vea PHP-FPM en acción!

Optimice los registros de PHP-FPM para solucionar problemas rápidamente

php-fpm.conf Nombre:

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

De esta manera, cada vez que se produzca un error 500, podrás ver directamente el registro:

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

Vea si PHP informa un error, como por ejemplo out of memory,script execution timeout Espera

Reinicie PHP-FPM periódicamente para evitar pérdidas de memoria

capaz de pasar cron Reinicie PHP-FPM periódicamente para evitar que los procesos de larga duración provoquenFugas de memoria.

crontab -e

Agregue la siguiente tarea programada para reiniciar automáticamente PHP-FPM a las 3 a. m. todos los días:

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

¿Qué pasa si el problema persiste? ¡Más optimización!

Si aún sigue la optimización anteriorOcasionalmente ocurren errores 500, puedes continuar con las siguientes optimizaciones:

1. Habilite OPcache para mejorar la eficiencia de ejecución de PHP

Si OPcache aún no está habilitado, puedes instalarlo de esta manera (usando Ubuntu como ejemplo):

sudo apt install php8.3-opcache -y

Luego edita php.ini:

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

¿Efecto? ¡La velocidad de ejecución de páginas PHP se ha mejorado enormemente!

2. Optimización de la configuración de Nginx

Asegúrese de que los parámetros relacionados con Nginx sean razonables, como fastcgi_read_timeout Ajústelo adecuadamente para evitar que Nginx finalice los scripts PHP debido al largo tiempo de ejecución:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Resumen: ¡Optimice PHP-FPM y el sitio web ya no se bloqueará!

¿Qué ajustes hemos realizado después de esta optimización?

✅ Optimización del grupo de procesos PHP-FPM,usar ondemandY optimizar pm.max_children parámetro;
Limitar el tiempo de ejecución de scripts PHP, para evitar la ocupación de la CPU a largo plazo;
Habilitar la monitorización de PHP-FPM, visualizar la carga del proceso en tiempo real;
Optimización de registros PHP-FPM, solucione rápidamente errores 500;
Reinicie PHP-FPM periódicamente, evitar fugas de memoria;
Habilitar OPcache, mejorar la eficiencia de ejecución de PHP;
Optimización de la configuración de Nginx, para evitar problemas de tiempo de espera.

¡Después de esta optimización, la carga de PHP-FPM se reducirá enormemente y el funcionamiento del sitio web será más estable! 🔥

¡Pruébalo ahora! 💪🚀

发表 评论

Su dirección de correo electrónico no será publicada. 项 已 用 * 标注

Directorio de artículos
Ir al Inicio