Laravel Octane - 高性能应用引擎
什么是 Laravel Octane?
Laravel Octane 是 Laravel 官方提供的高性能应用服务器,它通过使用 Swoole 或 RoadRunner 来显著提升应用性能。

核心优势
🚀 性能提升
- 内存常驻:应用启动一次,持续处理请求(传统 PHP-FPM 每次请求都要重新启动)
- 请求处理速度:比传统方式快 5-100 倍
- 并发处理:支持高并发场景
💡 主要特性
-
常驻内存
- 应用状态在请求间共享
- 减少重复初始化开销
-
异步任务处理
// 不需要额外安装队列即可异步处理 Octane::concurrently([ fn() => processData(), fn() => sendEmail(), fn() => updateCache(), ]); -
热重载
# 无需重启服务即可更新代码 php artisan octane:reload
安装与配置
安装依赖
composer require laravel/octane php artisan octane:install
选择服务器(推荐 Swoole)
# 安装 Swoole 扩展 pecl install swoole # 或者使用官方脚本 php artisan octane:install --server=swoole
启动 Octane
# 开发环境(带热重载) php artisan octane:start --watch # 生产环境 php artisan octane:start --host=127.0.0.1 --port=8000 --workers=4
配置优化
workers 配置(config/octane.php)
'workers' => 4, // 进程数 'max_requests' => 1000, // 进程处理请求数上限 'watch' => ['resources/views', 'app'], // 热重载监视目录
内存泄漏防护
// 在服务提供者中使用 tick 回调
Octane::tick('cleanup', function () {
DB::disconnect(); // 定期清理数据库连接
}, 60); // 每60秒执行
注意事项
⚠️ 需要避免的操作
- 不要在请求生命周期内缓存数据
// ❌ 错误 - 数据会一直保留 public function index() { static $data = []; $data[] = request()->all(); }
// ✅ 正确 - 使用框架缓存 Cache::put('key', $value, 300);
2. **避免全局状态污染**
```php
// ❌ 错误
class Service {
public $data;
}
// ✅ 正确 - 使用依赖注入
class Service {
public function handle($data) { ... }
}
- 数据库连接管理
// 每次请求后清理 app()->terminating(function () { DB::disconnect(); });
性能调优建议
启用 OpCache
opcache.enable=1 opcache.preload=/path/to/preload.php
配置示例
# 生产环境启动命令
php artisan octane:start \
--workers=8 \
--max-requests=500 \
--task-workers=4 \
--port=8000
使用预加载
// preload.php
$files = [
app_path().'/Http/Controllers/UserController.php',
app_path().'/Services/UserService.php',
];
foreach ($files as $file) {
require_once $file;
}
常见问题解决
Q1: 连接数过多
// config/octane.php 调整连接池
'database' => [
'default' => [
'pool' => [
'max_connections' => 20,
'min_connections' => 5,
'wait_timeout' => 3,
],
],
],
Q2: 定时任务
// 使用 Octane 的定时任务功能
Octane::schedule(function() {
Log::info('运行定时任务');
})->everyMinute();
Q3: WebSocket 支持
use Laravel\Octane\Facades\Octane;
Octane::webSocket('/ws', function ($req) {
return new WebSocketHandler();
});
生产环境部署
Nginx 配置示例
server {
listen 80;
server_name example.com;
# 请求转发到 Octane
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
监控命令
# 查看运行状态 php artisan octane:status # 重新加载配置 php artisan octane:reload --config # 查看详细状态 swoole_get_status() # 在代码中查看
性能对比
| 指标 | PHP-FPM | Laravel Octane |
|---|---|---|
| 单请求响应时间 | ~100ms | ~10ms |
| 内存占用 | 每请求 ~128MB | 常驻 ~256MB |
| 并发能力 | 100 req/s | 1000+ req/s |
| 预热时间 | 每请求需要 | 仅首次启动 |
- ✅ 使用:依赖注入、缓存系统、原子操作
- ❌ 避免:全局静态变量、Session 本地存储、未释放的资源
- 🔧 监控:定期检查内存、连接数、任务队列
Laravel Octane 特别适合:
- 高流量 API 服务
- 实时应用(WebSocket)
- 需要低延迟响应的应用
注意:生产环境需要仔细测试,确保所有代码都兼容常驻内存模式。