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

没有评论:

发表评论