Laravel 8/PHP 8应用任意页面启动耗时超2秒该如何排查解决?
Laravel 8 全请求高TTFB问题排查与解决方案
首先可以确定问题出在Laravel核心启动阶段或服务器运行环境层面,与业务逻辑、数据库查询无关,可按以下优先级排查:
1. Laravel核心启动开销排查
- 临时注释
app/Http/Kernel.php中的所有全局自定义中间件、config/app.php中注册的非官方第三方服务提供者,仅保留Laravel默认核心组件后测试空白路由响应速度,大概率可定位到异常的扩展包或自定义启动逻辑。 - 确认生产环境已开启所有Laravel内置缓存,执行以下命令生成缓存:
注意开发环境不要开启配置/路由缓存,修改配置后需执行php artisan optimize php artisan config:cache php artisan route:cache php artisan view:cachephp artisan optimize:clear清除缓存生效。
2. PHP运行环境排查
- 生产环境必须禁用xdebug、xhprof等调试扩展,这类扩展会带来300%以上的性能损耗。
- 确认PHP opcache扩展已开启且配置合理,Laravel依赖数千个Composer类文件,未开启opcache时每次请求都要重新编译所有PHP文件,直接导致耗时破1s,推荐生产环境配置:
opcache.enable=1 opcache.enable_cli=0 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.validate_timestamps=0 - 检查PHP-FPM worker进程配置,进程数不足会导致请求排队,出现无理由的高耗时。
3. 主机环境排查
- 若在WSL2环境下开发,需确认项目存放在WSL2原生Linux文件系统中,放在Windows挂载目录(如
/mnt/c/)下会导致文件IO性能暴跌,直接拉高类加载耗时。 - 检查磁盘IO使用率,机械硬盘、磁盘满负荷运行都会拖慢文件读取速度。
- 检查本地hosts配置,避免域名解析异常导致的等待超时。
4. 隐藏问题定位
- 查看
storage/logs目录下的日志,是否存在大量报错、重复请求重试的记录,这类异常操作会占用大量请求时间。 - 检查是否存在全局阻塞逻辑,例如服务提供者
boot方法中的同步第三方接口调用、未异步的邮件/消息队列发送操作。 - 可安装Laravel Debugbar扩展包,查看请求各阶段的耗时分布,直接定位到具体的异常环节。
内容的提问来源于stack exchange,提问作者Taylor Stocks
相关产品推荐
相关产品推荐

