Skip to main content

什麼是 Octane

Laravel Octane 是使用高效能應用程式伺服器來大幅提升 Laravel 應用程式效能的套件。 在一般的 PHP-FPM 中,每次請求都會啟動並結束應用程式。而在 Octane 中,應用程式只會啟動一次並保留在記憶體中,後續請求便能高速處理。 與 PHP-FPM 最大的差異在於,應用程式的啟動流程(服務提供者的註冊等)不會在每次請求時重複執行。只需啟動一次,後續便能以超高速處理請求。

支援的伺服器

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() 一律回傳最新的容器,因此是安全的。

Request 的注入

在 controller 方法或路由閉包中對 Illuminate\Http\Request 進行型別提示是安全的。全域輔助函式 request() 也一律回傳目前的 request。

設定 repository 的注入

全域輔助函式 config() 一律回傳最新的設定 repository,因此是安全的。

記憶體洩漏對策

由於 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 Table(僅 Swoole)

可定義任何 worker 皆可存取的自訂記憶體內資料表。透過 config/octane.phptables 進行設定。
存取資料表時使用 Octane::table() 方法。
Swoole table 支援的欄位型別僅有 stringintfloat。資料會在伺服器重啟時消失。

正式環境的運作

Nginx + Octane 的架構

正式環境中通常會在 Nginx 後方執行 Octane。Nginx 負責靜態檔案的傳遞與 SSL 終止,並將動態請求 proxy 至 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。
最後修改於 2026年8月2日