You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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%,可调整进程数配置:
    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
    
    避免进程过多导致CPU上下文切换开销增大
  • 确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:38:49