ubuntu

php-fpm在ubuntu上的性能瓶颈如何定位

小樊
46
2025-12-24 09:18:58
栏目: 编程语言

定位思路总览

快速排查步骤

  1. 资源与进程态势
    • 查看整体负载与资源:top/htop、vmstat 1、iostat -x 1;识别 CPU、内存、I/O 的异常。
    • 找出占用最高的 PHP-FPM 进程:ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head;对可疑 PID 做进一步排查。
    • 检查 PHP-FPM 监听与连接:ss -lntp | grep php;确认 127.0.0.1:9000/run/php/php.sock* 正常。
  2. PHP-FPM 自身状态与队列
    • 启用并访问 PHP-FPM 状态页(pm.status_path),观察 active processes、idle processes、requests、slow requests、queue 等关键指标,判断是否“进程不够”或“请求排队”。
    • 查看 PHP-FPM 错误日志(常见路径:/var/log/php-fpm.log 或 pool 配置目录),关注 WARNING/ERROR进程崩溃/重启迹象。
  3. 慢请求定位
    • 打开 PHP-FPM 慢日志:在 /etc/php/{version}/fpm/pool.d/www.conf 中设置
      • slowlog = /var/log/php-fpm/www-slow.log
      • request_slowlog_timeout = 1s(先设 1s,再按实际调优)
      • 重启服务后,用 tail -f 实时观察,定位到具体脚本与调用栈。
  4. 应用与数据库瓶颈
    • 对可疑请求开启 Xdebug/Blackfire 做函数级剖析,或用 Webgrind/KCacheGrind 可视化分析。
    • 打开 数据库慢查询日志(如 MySQL:slow_query_log=1,long_query_time=1),用 pt-query-digest 汇总分析,配合索引与 SQL 重写优化。

关键指标与判断要点

指标 如何查看 典型瓶颈表现 下一步动作
CPU 使用率 top/htop、vmstat 1 多核持续接近 100% 用 ps/top 找 Top N 的 php-fpm 进程,strace/perf 看系统调用与热点函数
内存与 OOM top/htop、pmap -x RSS 持续升高、OOM-killer 触发 分析内存泄漏(如对象未释放)、优化缓存/会话存储
I/O 等待 iostat -x 1、vmstat 1 await、svctm 高,util 接近 100% 查慢查询、日志/附件写入、外部存储或网络瓶颈
并发与队列 PHP-FPM 状态页(pm.status_path) active == pm.max_childrenqueue > 0 增加进程数或优化慢请求,必要时扩容/限流
慢请求 PHP-FPM 慢日志 大量请求超过阈值 定位到具体脚本/函数,优化算法与 SQL
数据库 MySQL slow log、pt-query-digest 慢 SQL、缺少索引 加索引、改写 SQL、引入查询缓存/读写分离
外部依赖 应用日志、Blackfire/Xdebug 调用第三方 API 耗时 加缓存、重试/熔断、异步化或降级处理

常用命令与配置示例

常见瓶颈与优化方向

0
看了该问题的人还看了