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

Laravel+Nginx+PHP8.2环境下PHP-FPM高CPU负载排查求助

Laravel+Nginx+PHP8.2环境下PHP-FPM高CPU负载排查求助

大家好,我现在遇到了PHP-FPM高CPU负载的棘手问题,想请各位帮忙一起排查下:

服务器基础信息与负载情况

  • 服务器配置:4核vCPU、14GB内存、250GB存储,运行在Azure的Docker容器中(使用虚拟磁盘)
  • 日常请求负载:工作日7小时内,平均每分钟400-500次请求

当前PHP-FPM配置

我已经调整了PHP-FPM的核心参数,配置如下:

  • max_children = 40
  • start_servers = 10
  • min_spare_servers = 10
  • max_spare_servers = 30
  • 进程模式设置为on-demand

异常现象描述

通过atop -C监控进程状态时,发现了以下异常:

  • 大部分PHP-FPM进程的CPU占用率在1-2%,属于正常范围
  • 但经常有2-3个进程持续占用66-89%的CPU,这个情况是常态化的
  • 当这类高CPU占用的进程达到4-5个及以上时,服务器总CPU占用会飙升到350%以上,而此时的请求量仅仅是每分钟400-500次,并没有超出日常平均水平
  • 哪怕请求量降到每分钟200左右(低于平均负载),也至少有3个进程的CPU占用超过60%,但查看nginx访问日志,并没有发现导出这类高负载的特殊请求,都是常规业务请求

已排查到的线索

  1. 项目基于Laravel框架开发,使用Pgbouncer做SQL连接池;虽然用Active Record模式导致SQL查询不算最优,但按道理不至于出现持续高CPU的情况
  2. 有5个由supervisorctl管理的队列工作线程在运行
  3. 目前使用文件系统存储session,在nginx错误日志中发现了Laravel文件查找相关的Maximum execution time of 30 seconds exceeded报错
  4. 下面是持续采集约2分钟的vmstat -w 5输出:
--procs-- -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------

r    b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st

3    1        60868       302760      1291416      8474048    0    0     3    94    3    2   7   9  83   1   0

3    0        60868       305652      1291420      8474100    0    0     0   184 3032 11293  22  40  37   0   0

6    0        60868       307456      1291420      8474152    0    0     0   102 3043 12776  26  40  33   0   0

1    0        60868       309116      1291420      8474436    0    0     0   235 2904 13905  26  39  34   1   0

2    0        60868       301588      1291428      8476964    0    0     0  1245 2935 15069  30  40  29   1   0

3    1        60868       281128      1291432      8490560    0    0     0   196 2627 13892  31  40  29   1   0

2    0        60868       303012      1291432      8484872    0    0     0   159 3759 13004  21  37  40   2   0

9    0        60868       301080      1291436      8479384    0    0     0   151 3281 12728  24  41  35   0   0

5    0        60868       313884      1291436      8478624    0    0     0    94 2999 13096  27  39  33   0   0

2    0        60868       310636      1291444      8477260    0    0     0    70 3204 11980  24  36  40   0   0

2    0        60868       309108      1291448      8477488    0    0     0  1542 2982 11453  20  29  50   0   0

1    0        60868       305752      1291448      8477648    0    0     0    78 3036 9900  18  28  54   0   0

2    0        60868       303772      1291448      8477816    0    0     0   133 2408 8044  14  18  67   0   0

3    0        60868       295540      1291448      8477884    0    0     0   158 2482 8559  16  22  61   0   0

1    0        60868       295684      1291452      8477888    0    0     0   105 2985 10358  20  28  52   0   0

0    0        60868       295620      1291460      8477884    0    0     0    42 2352 7613  13  17  69   0   0

1    0        60868       296772      1291464      8478040    0    0     0   134 2751 10899  14  19  67   0   0

1    0        60868       279304      1291468      8495716    0    0     0   534 2801 9469  15  20  63   2   0

3    0        60868       304536      1291472      8485952    0    0     0    59 3420 11658  17  22  59   2   0

1    0        60868       297360      1291476      8480584    2    0     2    97 3079 11568  22  30  48   0   0

1    0        60868       327652      1291476      8479708    0    0     0   220 2777 8600  16  27  56   1   0

注:不确定这个输出是否完全准确,因为服务器在Azure的Docker容器中使用了虚拟磁盘

求助需求

有没有什么有效的方法可以定位到到底是什么导致PHP-FPM进程出现这么高的CPU占用?目前我在等Azure App Insights上线,打算用它做进一步的链路排查,但现在想先看看有没有其他即时可用的调试思路,麻烦各位给点建议,万分感谢!

备注:内容来源于stack exchange,提问作者Jaquarh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:43:02