Laravel Octane、原生Docker与 WSL2:极端性能问题

前端开发 2026-07-11

我在Docker + WSL2上运行的Laravel应用遇到了严重的性能问题。尽管做了大量优化,所有页面的加载时间都在2-10秒之间。我希望有人遇到过类似情况,能指点我方向。

## Environment

- **OS:** Windows 11 with WSL2 (Ubuntu)
- **Framework:** Laravel 11 + Filament 3 + Livewire 3
- **Server:** Laravel Octane with Swoole (4 workers)
- **Setup:** Docker Compose (multi-container)
- **Database:** Microsoft SQL Server (Docker container)
- **Cache/Session:** Redis (local Docker container)
- **Project Location:** WSL2 native filesystem `/data/www/` (NOT `/mnt/c/`)

## The Problem

**Every single page** takes 2-10 seconds to load in the browser, despite server logs showing only 300-400ms PHP processing time.

**Performance Metrics:**

Server logs (`storage/logs/performance-*.log`):
```json
{
  "total_ms": 300-400,
  "database_ms": 0,
  "app_logic_ms": 300-400
}

浏览器开发者工具(实际用户体验):

  • 简单页面:2-4秒
  • 仪表板:6-10秒
  • 所有页面都持续变慢

服务器报告的时间(300ms)与实际用户体验(2-10s)之间存在约1.5-9.5秒的差距。

我已经尝试过的办法

我已经实现了我能找到的所有优化:

OPcache CLI已启用 - 已通过 opcache.enable_cli=1 验证,结果与 php -i 相符
Vendor目录放在Docker卷中 - 将 vendor/node_modules/ 移到命名的Docker卷(不是绑定挂载)
Swoole工作进程优化 - 使用4 个工作进程
Laravel缓存
调试工具禁用 - APP_DEBUG=false,Debugbar和 Clockwork关闭
本地Redis - REDIS_HOST=redis(Docker容器,本地而非远程)
本地存储 - 已将Azure Blob存储切换为本地磁盘
广播禁用 - BROADCAST_CONNECTION=log

=========================================

我观察到的情况

  1. 服务器日志始终显示 300-400ms 的处理时间
  2. 浏览器显示总加载时间为 2-10秒
  3. 1.5-9.5秒的差距没有解释清楚
  4. 所有页面 都受影响,而不仅仅是某些功能
  5. 随后刷新也不会变快(缓存没有帮助)

所以问题是

这是Docker + WSL2的正常开销吗?在这个栈下应该预期2-10秒的页面加载吗?

解决方案

你需要在完全脱离当前这套设置的情况下测试应用,以便逐个排除导致问题的环节

1- 在本地开发环境中使用Docker + Redis的应用会像这样慢吗?

2- 你是否在原生Linux VPS上试过?

3- 试着关闭HTTPS只用HTTP,看差异?

4- 我怀疑是Filament + Livewire?尝试用一个普通的视图(简单Blade,甚至简单的HTML)来测试差异。我会考虑移除Filament和 Livewire,然后再测试情况。

额外说明:我的生产环境有一个使用Octane的 Laravel应用,但我使用FrankenPHP,而不是Swoole;你也需要在两者都不使用的情况下测试应用;也许某些配置有误,导致这里变慢。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章