必须执行php artisan octane:install才能启用FrankenPHP Worker模式,否则默认回退至无性能提升的经典模式;启动时须显式指定--server=frankenphp,且workers数不得超过workers.count硬上限。

必须执行 php artisan octane:install,否则永远进不了 Worker 模式。 这是最常被跳过的一步——不运行它,vendor/bin/frankenphp-worker.php 不会生成,server.php 也不会被重写,Octane 启动时直接 fallback 到经典 HTTP 服务,终端只显示 Starting FrankenPHP Server,毫无报错,但性能毫无提升。
启动命令必须带 --server=frankenphp
默认的 php artisan octane:start 走的是 Swoole 或 RoadRunner,完全绕过 FrankenPHP。要让它接入 FrankenPHP 的线程池,必须显式指定:
php artisan octane:start --server=frankenphp --workers=4- 缺
--server=frankenphp,workers.count配置对 Octane 就是摆设 - 如果
config/octane.php里'server'键写成'frankenphp '(末尾有空格),Octane 也不报错,只是静默退化
Caddyfile 不能用 reverse_proxy,得用 php_server
FrankenPHP 的 Worker 模式要求 PHP 代码在受控线程内运行,不能自己 fork 或绑定端口。所以:
- 禁止在 Caddyfile 里写
reverse_proxy http://127.0.0.1:8000去代理 Octane 的 HTTP 端口 - 必须用
php_server指令直调public/index.php,由 FrankenPHP 内部调度线程执行 - 确认项目根目录没有
octane-server.php强制监听端口或 daemonize,否则会冲突
workers.count 和 --workers 不是同一个东西
workers.count 是 FrankenPHP 启动时预分配的 PHP 线程总数(硬上限),--workers 是 Octane 启动的常驻子进程数,二者关系是:
立即学习“PHP免费学习笔记(深入)”;
-
--workers必须 ≤workers.count,否则启动报failed to spawn worker: resource temporarily unavailable -
workers.count建议设为 CPU 核心数的 1–2 倍(如 4 核设 6–8) -
--workers推荐从min(4, workers.count)起步,再根据frankenphp_busy_threads / frankenphp_total_threads比值调优
最容易被忽略的是:Worker 模式下,Laravel 应用常驻内存,但队列和定时任务仍是独立 CLI 进程,必须用 Supervisor 和系统 cron 单独管理,和 FrankenPHP 完全解耦。



















