2025年2月6日星期四

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

原文链接:https://www.chenweiliang.com/cwl-32490.html


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


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


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


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

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

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


1. 限制 php-fpm 进程数


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

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


打开 php-fpm 配置文件:


sudo nano /etc/php/*/fpm/pool.d/www.conf

找到并修改以下参数:


pm = dynamic
pm.max_children = 30 # 限制最大 PHP 进程数(根据服务器性能调整)
pm.start_servers = 5 # 初始进程数
pm.min_spare_servers = 3 # 最小空闲进程数
pm.max_spare_servers = 10 # 最大空闲进程数

然后重启 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 php-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,拯救你的服务器! 🚀





欢迎转载《HestiaCP php-fpm 进程占用了大量 CPU 资源,如何优化?》

欢迎分享本文链接:https://www.chenweiliang.com/cwl-32490.html


网站地址:https://www.chenweiliang.com/



欲获取更多资讯内幕和秘技,欢迎进入Telegram频道:https://www.chenweiliang.com/go/tgchannel

没有评论:

发表评论