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

Laravel 11偶发CPU高占用及Bootstrap耗时增加问题排查求助

Laravel 11 偶发PHP-FPM CPU占满、Bootstrap耗时飙升排查思路

基础信息

服务器配置

  • 32核CPU
  • 128GB内存
  • SSD存储
  • Nginx + PHP-FPM(进程数限制为20)

流量情况

  • 日均400万请求(均匀分布)
  • 服务器平均负载约10%

问题现象

正常状态下性能优异,但会无征兆出现单个/多个PHP-FPM进程CPU占用飙升至100%的情况,导致应用响应大幅变慢。该状态持续数小时后自行恢复,期间无流量波动或外部环境变化。

已排查进展

使用Tideways分析发现,高负载期间核心差异为Laravel Bootstrap阶段耗时显著增加(对应Tideways面板中的浅蓝色条形),暂未定位到明确触发因素。


可能原因与排查建议

1. 缓存相关问题

Laravel Bootstrap阶段大量依赖缓存(配置缓存、路由缓存、视图缓存等),缓存失效或读取异常会导致重复编译/解析,拉高CPU占用:

  • 检查bootstrap/cache目录及文件的读写权限,对比正常与异常时段的缓存文件访问日志,确认是否存在进程无法读取缓存的情况
  • 监控缓存命中率,排查是否存在缓存被意外清除(如部署脚本误操作、磁盘空间不足导致缓存写入失败)
  • 异常时段手动执行php artisan config:cache、php artisan route:cache,观察是否能缓解症状

2. 依赖包自动加载异常

Composer自动加载缓存损坏或未优化,会导致PHP反复扫描文件:

  • 检查vendor/composer/autoload_*.php文件在异常时段是否有变更或大小异常
  • 异常时执行composer dump-autoload -o重新生成优化后的自动加载文件,对比性能变化
  • 排查是否有第三方依赖包在运行时修改自动加载规则

3. 环境变量读取阻塞

Laravel Bootstrap会加载环境变量,若依赖远程配置中心或系统环境变量加载异常,会引发阻塞:

  • 检查是否使用远程配置服务(如Vault),异常时段查看该服务的可用性及响应延迟
  • 尝试将环境变量写入系统全局配置(而非.env文件),观察问题是否复现
  • 监控getenv()/env()函数的调用耗时,确认是否是环境变量读取导致的延迟

4. PHP-FPM进程状态异常

进程长时间运行可能出现内存泄漏、状态损坏:

  • 配置PHP-FPM的pm.max_requests参数(如设为1000),让进程处理一定请求数后自动重启
  • 异常时段用ps aux定位CPU占满的进程ID,再执行strace -p <PID>跟踪系统调用,查看是否卡在文件读取或系统调用环节
  • 检查php-fpm.log,是否有进程崩溃、重启的记录

5. 文件系统/磁盘IO异常

即使是SSD,临时IO阻塞或文件系统错误也会影响Bootstrap阶段的文件读取:

  • 异常时段执行iostat -x 1查看磁盘IO指标,确认是否有IO使用率飙升、读写延迟增加的情况
  • 检查系统日志(/var/log/messages或dmesg),是否有磁盘相关错误信息
  • 测试bootstrap/cache、vendor目录下文件的读取速度,对比正常与异常时段的差异

6. Laravel服务提供者初始化阻塞

Bootstrap阶段会加载所有服务提供者的register/boot方法,若某个服务提供者初始化时阻塞:

  • 逐个注释config/app.php中的非核心服务提供者,观察问题是否消失
  • 在核心服务提供者的register/boot方法中添加耗时日志,异常时段排查哪个服务提供者初始化耗时突增
  • 检查服务提供者是否依赖外部资源(如数据库、Redis),异常时这些资源是否存在连接超时或响应延迟

内容的提问来源于stack exchange,提问作者Iceman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:12:42