HestiaCP php-fpm 进程占用了大量 CPU 资源,如何优化?

HestiaCP 服务器 CPU 飙升?PHP-FPM 进程优化全攻略!

HestiaCP php-fpm 进程占用了大量 CPU 资源,如何优化?

服务器 CPU 一直 100%?风扇狂转?网站打开速度变慢?罪魁祸首可能是 php-fpm!

我最近发现 chenweiliang.com 这个 PHP 池的 php-fpm 进程疯狂吃掉 CPU,服务器直接卡奔溃!

为了复活服务器,我尝试了一系列优化方法,最终成功降低了 CPU 占用率。

现在,就来分享这份 高效优化指南!🚀

1. 限制 php-fpm 进程数

php-fpm 默认设置可能会无限制地创建进程,导致服务器 CPU 过载。

要优化它,我们可以修改进程管理参数。

打开 php-fpm 配置文件:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *改为你的PHP版本,比如PHP8.3,改成这样:/etc/php/8.3/fpm/pool.d/www.conf

查询 HestiaCP 设置的 PHP 版本

v-list-web-domain user domain.com

例如:

v-list-web-domain abc chenweiliang.com

在输出中,你会看到类似:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

这表示该网站使用 PHP 8.3。

找到并修改以下参数:

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 后自动退出

然后重启 php-fpm 使其生效:

sudo systemctl restart php-fpm

✅ 效果:限制进程数量,防止 php-fpm 过度消耗 CPU 资源。

2. 启用 OPCache(提升 PHP 执行效率)

PHP 每次执行都会重新解析代码,这非常浪费资源。
解决方案?启用 OPCache,把 PHP 代码缓存起来!

编辑 php.ini 文件:

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

添加或修改以下内容:

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

保存后,重启 PHP 进程:

sudo systemctl restart php8.3-fpm

✅ 效果:减少 PHP 代码的重复解析,减少 CPU 负担,提高执行效率。

3. 限制 PHP 脚本最大执行时间

如果 PHP 脚本运行时间过长,CPU 资源会被持续占用。
设置合理的超时时间,可以避免“顽固”进程长期霸占服务器。

打开 php.ini 文件:

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

修改以下参数:

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

然后重启 PHP 进程:

sudo systemctl restart php-fpm

✅ 效果:防止 PHP 进程长时间运行,减少 CPU 资源浪费。

4. 检查 MySQL 慢查询

PHP-FPM 负载高,可能是 SQL 查询太慢导致的!
开启 MySQL 慢查询日志,找出“拖后腿”的 SQL 语句。

编辑 MySQL 配置文件:

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

添加:

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

保存后,重启 MySQL:

sudo systemctl restart mysql

然后使用 mysqldumpslow 分析慢查询:

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

✅ 效果:找出耗时 SQL 查询,优化数据库性能,间接降低 PHP 负载。

5. 限制 Memcached 资源占用

查看进程列表,我发现 Memcached 进程 CPU 占用 24.8%!
可能是缓存分配太大,导致 CPU 处理大量数据。

调整 memcached 配置:

sudo nano /etc/memcached.conf

修改:

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

然后重启:

sudo systemctl restart memcached

✅ 效果:减少 Memcached 进程的 CPU 负担,提高缓存效率。

6. 开启 Nginx 缓存静态资源

很多时候,PHP 处理的请求里包含大量 CSS、JS、图片,但这些文件根本不需要 PHP 解析!
解决方案?用 Nginx 缓存静态资源!

编辑 Nginx 配置:

sudo nano /etc/nginx/nginx.conf

添加:

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

保存后,重启 Nginx:

sudo systemctl restart nginx

✅ 效果:减少 PHP 处理静态文件的次数,降低 CPU 占用率。

7. 找出占用 CPU 最高的 PHP 脚本

如果优化后仍然 CPU 过高,可能是某些 PHP 脚本在疯狂运行。
用以下命令找出 CPU 最高的 PHP 进程:

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

如果发现某个 PHP 脚本占用 CPU 过高,可以直接杀掉它:

kill -9 PID

✅ 效果:精准找出“害群之马”,避免 PHP 进程长时间占用 CPU。

总结:优化 PHP-FPM 的 7 大方法

✅ 限制 PHP-FPM 进程数,防止 CPU 过载
✅ 启用 OPCache,减少 PHP 代码重复解析
✅ 设置 PHP 超时时间,防止长时间运行
✅ 检查 MySQL 慢查询,优化数据库查询性能
✅ 调整 Memcached 内存,减少 CPU 负担
✅ 开启 Nginx 静态缓存,降低 PHP 解析负担
✅ 找出高 CPU 占用的 PHP 脚本,精准优化

结论

服务器优化就像健身,要精准调整,不要乱搞!
一通优化下来,我的服务器 CPU 负载从 80% 下降到 15%,网站打开速度快了一倍!
如果你的服务器也有类似问题,快试试这些方法吧!💪

👉 现在行动!优化你的 PHP-FPM,拯救你的服务器! 🚀

发表评论

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

Scroll to Top