PHP-FPM高CPU使用率排查:Ubuntu22.04+PHP8.1生产环境问题分析
PHP-FPM高CPU使用率排查方案(Ubuntu 22.04 + PHP 8.1 + WooCommerce)
一、实时定位PHP-FPM进程负载
- 用
htop或top命令查看CPU占用排序,标记出高CPU的PHP-FPM进程PID - 启用PHP-FPM状态页:在
/etc/php/8.1/fpm/pool.d/www.conf中开启pm.status_path = /status,重启PHP-FPM后访问对应路径,对比开发环境的active processes、requests per second、idle processes等指标 - 执行
ps aux | grep php-fpm统计当前PHP-FPM进程总数,判断是否超出合理范围
二、对比生产与开发环境的核心差异
- 检查请求流量:实时查看Web服务器日志(如
tail -f /var/log/nginx/access.log),确认生产环境QPS是否远高于开发环境,是否存在爬虫、批量请求等异常流量 - 核查插件与主题:生产环境是否额外安装了WooCommerce支付网关、库存同步、数据分析类插件?这类插件可能在生产环境触发高频操作(如支付回调、实时库存更新);同时确认主题版本、WordPress核心版本与开发环境完全一致
- 分析数据库差异:生产数据库的订单、商品、用户数据量通常远大于开发环境,开启MySQL慢查询日志(
slow_query_log = 1),记录执行时间超过2s的SQL,排查是否存在未优化的关联查询、无索引的字段查询
三、追踪PHP-FPM进程的具体耗时操作
- 用
strace跟踪高CPU进程:执行strace -tt -p [PID],观察是否存在频繁的文件读写、网络请求(如调用外部API),这类操作容易导致CPU持续高负载 - 启用PHP-FPM慢日志:在
www.conf中设置request_slowlog_timeout = 5s和slowlog = /var/log/php8.1-fpm.slow.log,重启服务后查看日志定位超时的PHP脚本与函数 - 临时启用WordPress的
Query Monitor插件:在生产环境临时安装并启用,查看页面加载过程中的SQL查询耗时、钩子执行时间、函数调用次数,定位WooCommerce相关的性能瓶颈(使用后及时禁用,避免影响性能)
四、针对性优化PHP-FPM与运行环境
- 调整PHP-FPM进程参数:4核8G服务器当前内存使用率仅30%,可调整进程数配置:
避免进程过多导致CPU上下文切换开销增大pm = dynamic pm.max_children = 20 pm.start_servers = 8 pm.min_spare_servers = 4 pm.max_spare_servers = 12 pm.process_idle_timeout = 10s - 确保OPcache正常启用:在
php.ini中确认opcache.enable=1,设置opcache.memory_consumption=128、opcache.max_accelerated_files=10000,缓存已编译的PHP脚本,减少重复编译带来的CPU消耗 - 优化WooCommerce配置:关闭不必要的实时库存检查、禁用未使用的支付网关、启用缓存插件(如Redis)缓存商品列表、订单页面等高频访问内容
五、排查系统层面的潜在影响
- 用
top查看整体系统负载,确认是否有 cron 任务、备份脚本、监控工具等占用CPU - 执行
iostat -x 1检查磁盘IO使用率,若磁盘读写过高会导致PHP进程等待,间接拉高CPU占用 - 用
netstat -anp | grep ESTABLISHED查看网络连接数,是否存在大量未释放的连接导致进程阻塞
内容的提问来源于stack exchange,提问作者NoobyAFK
相关产品推荐
相关产品推荐

