El proceso php-fpm de HestiaCP consume muchos recursos de CPU. ¿Cómo puedo optimizarlo?

¿Picos de uso de CPU en el servidor HestiaCP ? ¡Una guía completa para la optimización de procesos PHP-FPM!

El proceso php-fpm de HestiaCP consume muchos recursos de CPU. ¿Cómo puedo optimizarlo?

¿El uso de la CPU de tu servidor está constantemente al 100%? ¿Los ventiladores giran a toda velocidad? ¿Tu sitio web carga lentamente? ¡ El culpable podría ser php-fpm!

Descubrí recientemente chenweiliang.com Este pool de PHP php-fpm ¡El proceso consumió mucha CPU y el servidor colapsó!

Para revivir el servidor, probé una serie de métodos de optimización y finalmente logré reducir el uso de la CPU.

¡Ahora, compartamos esta eficaz guía de optimización ! 🚀

1. Limite el número de procesos php-fpm

La configuración predeterminada de php-fpm puede crear un número ilimitado de procesos, lo que provoca una sobrecarga de la CPU del servidor.

Para optimizarlo, podemos modificar los parámetros de gestión del proceso.

Abierto 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 indica que el sitio web utiliza PHP 8.3.

Busque y modifique los siguientes 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 后自动退出

Luego reinicie php-fpm Para que sea efectivo:

sudo systemctl restart php-fpm

✅Efecto : Limita el número de procesos para evitar que php-fpm consuma excesivamente recursos de CPU.

2. Habilite OPCache (para mejorar el rendimiento de PHP)

PHP vuelve a analizar el código cada vez que se ejecuta, lo que supone un desperdicio de recursos.
¿La solución? ¡Habilite OPCache y almacene en caché su código PHP!

编辑 php.ini documento:

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

Añade o modifica lo siguiente:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0  # 禁用实时检测,提高性能

Después de guardar, reinicie el proceso PHP:

sudo systemctl restart php8.3-fpm

✅Efecto : Reduce el análisis repetitivo del código PHP, disminuye la carga de la CPU y mejora la eficiencia de la ejecución.

3. Limite el tiempo máximo de ejecución de los scripts PHP

Si un script PHP se ejecuta durante demasiado tiempo, los recursos de la CPU estarán continuamente ocupados.
Establecer un período de tiempo de espera razonable puede evitar que procesos "obstinados" ocupen el servidor durante mucho tiempo.

Abierto php.ini documento:

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

Modifique los siguientes parámetros:

max_execution_time = 30  # PHP 脚本最多执行 30max_input_time = 30  # 处理输入数据最多 30memory_limit = 256M  # 限制单个 PHP 进程的内存占用

Luego reinicie el proceso PHP:

sudo systemctl restart php-fpm

✅Efecto : Evita que los procesos PHP se ejecuten durante períodos prolongados, reduciendo el desperdicio de recursos de la CPU.

4. Verificar MySQL Consulta lenta

PHP-FPM tiene una carga alta,¡Puede ser causado por la lentitud de la consulta SQL!
开启 MySQL Registro de consultas lentas, descubra las sentencias SQL que están reteniendo el resultado.

Editar el archivo de configuración de MySQL:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Nombre:

slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1  # 超过 1 秒的查询会被记录

Después de guardar, reinicie MySQL:

sudo systemctl restart mysql

Luego usa mysqldumpslow Analizar consultas lentas:

mysqldumpslow -s c -t 10 /var/log/mysql-slow.log

✅Resultado : Identificar las consultas SQL que consumen mucho tiempo, optimizar el rendimiento de la base de datos y reducir indirectamente la carga de PHP.

5. Restricciones Memcached Uso de recursos

Mirando la lista de procesos, encontré ¡El uso de CPU del proceso Memcached es del 24.8%!
Es posible que la asignación de caché sea demasiado grande, lo que provoca que la CPU procese una gran cantidad de datos.

调整 memcached Configuración:

sudo nano /etc/memcached.conf

修改:

-m 32  # 限制 Memcached 内存使用 32MB

Luego reinicie:

sudo systemctl restart memcached

✅Efecto : Reduce la carga de la CPU en el proceso Memcached y mejora la eficiencia del almacenamiento en caché.

6. Habilite Nginx para almacenar en caché recursos estáticos

Muchas veces, PHP procesa solicitudes que contienen una gran cantidad de CSS, JS, imágenes, ¡pero estos archivos no necesitan análisis PHP en absoluto!
¿La solución? ¡Utilice Nginx para almacenar en caché recursos estáticos!

Editar la configuración de Nginx:

sudo nano /etc/nginx/nginx.conf

Nombre:

location ~* \.(jpg|jpeg|png|gif|css|js|ico|xml)$ {
    expires max;
    log_not_found off;
}

Después de guardar, reinicie Nginx:

sudo systemctl restart nginx

✅Resultado : Reduce la cantidad de veces que PHP procesa archivos estáticos, disminuyendo así el uso de la CPU.

7. Encuentra el script PHP que utiliza más CPU

Si el consumo de la CPU sigue siendo demasiado alto después de la optimización, es posible que algunos scripts PHP se estén ejecutando de forma descontrolada.
Utilice el siguiente comando para descubrir el proceso PHP con el mayor uso de CPU:

ps -eo pid,user,pcpu,pmem,args --sort=-pcpu | grep php

Si descubre que un script PHP está ocupando demasiada CPU, puede eliminarlo directamente:

kill -9 PID

✅Resultado : Identifica con precisión los procesos problemáticos y evita que los procesos PHP ocupen la CPU durante períodos prolongados.

Resumen: 7 formas de optimizar PHP-FPM

Limitar el número de procesos PHP-FPM, para evitar la sobrecarga de la CPU
Habilitar OPCache, reduce el análisis repetido del código PHP
Configuración del tiempo de espera de PHP, para evitar el funcionamiento a largo plazo
Comprobación de consultas lentas en MySQL, optimizar el rendimiento de las consultas de la base de datos
Ajustar la memoria Memcached, reduciendo la carga de la CPU
Habilitar la caché estática de Nginx, reduciendo la carga de análisis de PHP
Encuentre scripts PHP que hacen un uso elevado de la CPU, optimización precisa

Conclusión

La optimización del servidor es como el fitness: hay que hacer ajustes precisos y no andarse con rodeos.
Después de una serie de optimizaciones, la carga de la CPU de mi servidor ha disminuido de 80% hasta 15%¡El sitio web se abre el doble de rápido!
Si su servidor tiene problemas similares, ¡pruebe estos métodos! 💪

👉¡Actúa ahora! ¡Optimiza tu PHP-FPM y salva tu servidor! 🚀

发表 评论

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

Ir al Inicio