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

hestiacp ¿Pico de CPU del servidor? ¡Una guía completa para optimizar el proceso PHP-FPM!

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

¿La CPU del servidor está siempre al 100%? ¿El ventilador está girando salvajemente? ¿La velocidad de apertura del sitio web está disminuyendo?¡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 esto. Guía de optimización eficiente! 🚀

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

La configuración predeterminada de php-fpm puede无限El proceso se crea sin control, provocando que la CPU del servidor se sobrecargue.

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 significa 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:Limite la cantidad de procesos para evitar que php-fpm consuma demasiados recursos de la 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 repetido del código PHP, reduce la carga de la CPU y mejora la eficiencia de 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 mucho tiempo y reduce 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

efecto:Descubra consultas SQL que consumen mucho tiempo, optimice el rendimiento de la base de datos y reduzca indirectamente la carga de PHP.

5. Limite el uso de recursos de Memcached

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 del proceso Memcached y mejora la eficiencia del 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

efecto:Reduce la cantidad de veces que PHP procesa archivos estáticos y reduce 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

efecto:Identifique con precisión las "manzanas podridas" y evite que el proceso PHP ocupe la CPU durante mucho tiempo.

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! ¡Optimice su PHP-FPM y salve su servidor! 🚀

发表 评论

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

Ir al Inicio