Skip to main content

什么是 Octane

Laravel Octane 是一个通过高性能应用服务器让 Laravel 应用性能大幅提升的扩展包。 在传统的 PHP-FPM 下,每个请求都会启动并销毁一次应用。Octane 只启动应用一次并常驻在内存中,用来极快地处理后续请求。 与 PHP-FPM 最大的差别在于,服务提供者注册、Bootstrap 等启动逻辑不会在每个请求中重复执行。启动一次后,后续的请求都能以极快的速度处理。

支持的服务器

Octane 支持以下三种服务器。
在 Laravel Cloud 上推荐使用 FrankenPHP 运行 Octane,完全托管。

安装与配置

安装扩展包

Octane 初始化

执行后会提示选择服务器。选择后会生成 config/octane.php

FrankenPHP

选择 FrankenPHP 后,Octane 会自动下载二进制。无需额外操作。

RoadRunner

选择 RoadRunner 后,Octane 会自动下载二进制。

Swoole

Swoole 是 PHP 扩展,通过 PECL 安装。
若使用 Open Swoole,请使用如下命令。

启动方式

启动服务器

默认监听 8000 端口。访问 http://localhost:8000 即可。

指定服务器

指定 worker 数

Swoole 下如需指定 task worker:

监听文件变化

开发时如果不重启服务器,文件更改不会生效。加上 --watch 参数可以自动重启。
--watch 需要 Node.js 与 Chokidar。

其他管理命令

依赖注入的注意事项

Octane 将应用常驻内存,所以服务提供者的 registerboot 只在服务器启动时执行一次。同一个应用实例会在多次请求间被复用,因此把容器或请求注入到对象的构造函数中需要格外小心。

注入容器

如果直接把容器注入到单例的构造函数,会一直复用旧容器。
全局辅助函数 app()Container::getInstance() 始终返回最新容器,是安全的。

注入请求

在控制器方法或路由闭包中用类型提示注入 Illuminate\Http\Request 是安全的。全局辅助函数 request() 也始终返回当前请求。

注入配置仓库

全局辅助函数 config() 始终返回最新的配置仓库,是安全的。

应对内存泄漏

由于 Octane 会把应用保持在内存中,向静态属性等地方持续累积数据会导致内存泄漏。

通过 max-requests 回收 worker

worker 处理一定次数请求后自动重启,可以缓解内存泄漏。默认是 500 次。

设置最大执行时间

config/octane.php 中可以设置单个请求的最大执行时间,默认是 30 秒。
修改 max_execution_time 后请重启 Octane 服务器。

并发任务(仅限 Swoole)

在使用 Swoole 时,可以通过 Octane::concurrently() 并发执行多个任务。
并发任务会作为 Swoole 的“task worker”以独立进程运行,task worker 数量通过 --task-workers 指定。
concurrently 传入的任务最多 1024 个(Swoole 的限制)。

Tick 与 Interval(仅限 Swoole)

Swoole 下可以注册按指定间隔定期执行的任务。在服务提供者的 boot 方法中注册。

Octane 缓存(仅限 Swoole)

基于 Swoole 的 Swoole Table 的高速内存缓存,每秒可完成最多 200 万次读写。

Interval 缓存

按指定时间间隔自动刷新的缓存。
Octane 缓存中的数据在服务器重启后会全部丢失。

Swoole 表(仅限 Swoole)

你可以定义任意 worker 都可访问的共享内存表。在 config/octane.phptables 中配置。
通过 Octane::table() 方法访问表。
Swoole 表只支持 stringintfloat 列类型。数据在服务器重启后丢失。

生产环境部署

Nginx + Octane 架构

生产环境通常在 Nginx 后面运行 Octane。Nginx 负责静态资源和 SSL 终端,把动态请求代理给 Octane。

使用 Supervisor 常驻

在生产环境用 Supervisor 让 Octane 常驻运行。

启用 HTTPS

若要让 Octane 生成 HTTPS 链接,请在 .env 中设置:

与 Laravel Cloud 结合

Laravel Cloud 完全托管地支持 FrankenPHP 版 Octane。无需配置 Nginx 或 Supervisor,只需两步即可启用 Octane。
1

安装扩展包

安装 Octane。octane:install 命令可以执行,但不是必需的。
2

在 Laravel Cloud 中启用 Octane

打开环境的 App 计算集群设置,打开 “Use Octane as runtime” 保存并部署即可。Laravel Cloud 会自动使用 FrankenPHP + Octane 构建并启动应用。
详情请参考 Laravel Cloud 文档

部署后重新加载 worker

部署后需要重新加载 worker 才能让新代码进入内存。

覆盖 php artisan dev 使用的本地服务器

安装 Octane 后,php artisan devserver 进程可能也会被配置为使用 Octane。如果希望在 Laravel Cloud 的生产环境中使用 Octane,但本地仍使用标准的 php artisan serve,可以在 AppServiceProviderregister 方法中重新注册 server 命令。
这样一来,运行 php artisan dev 会通过 php artisan serve 启动本地 server 进程。而在 Laravel Cloud 上可以继续将 Octane 作为运行时使用。
最后修改于 2026年8月21日