原文链接:https://www.chenweiliang.com/cwl-32490.html
文章目录
HestiaCP 服务器 CPU 飙升?PHP-FPM 进程优化全攻略!
服务器 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
没有评论:
发表评论