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 = 40start_servers = 10min_spare_servers = 10max_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访问日志,并没有发现导出这类高负载的特殊请求,都是常规业务请求
已排查到的线索
- 项目基于Laravel框架开发,使用Pgbouncer做SQL连接池;虽然用Active Record模式导致SQL查询不算最优,但按道理不至于出现持续高CPU的情况
- 有5个由
supervisorctl管理的队列工作线程在运行 - 目前使用文件系统存储session,在nginx错误日志中发现了Laravel文件查找相关的
Maximum execution time of 30 seconds exceeded报错 - 下面是持续采集约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
相关产品推荐
相关产品推荐

