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。

覆寫 php artisan dev 的本地伺服器

在安裝了 Octane 之後,php artisan devserver process 也可能被設定為使用 Octane。若希望在 Laravel Cloud 的正式環境使用 Octane,但本地使用標準的 php artisan serve,可於 AppServiceProviderregister 方法重新註冊 server 指令。
如此一來,執行 php artisan dev 時本地的 server process 會透過 php artisan serve 啟動。在 Laravel Cloud 上仍可保持啟用 Octane 作為 runtime。
最後修改於 2026年8月21日