frankenphp 1.6 默认启用 worker 模式时自动热重载,生产环境需在 caddyfile 的 php 块内显式配置 reload off 以禁用文件监听与自动重载,避免性能损耗和请求中断。

FrankenPHP 1.6 默认启用 worker 模式时,会自动监听 PHP 文件变更并触发重载(hot reload),这对开发调试友好,但在生产环境会带来额外开销:文件系统轮询、inotify 资源占用、重载瞬间的请求中断或延迟,反而影响稳定性与吞吐。
要关闭 worker 自动重载以提升性能,关键不是改 PHP 代码,而是控制 FrankenPHP 启动时的行为——通过 Caddyfile 配置禁用热重载机制。
关闭 worker 自动重载的配置方式
FrankenPHP 的自动重载由 php 指令下的 reload 子指令控制。在 Caddyfile 中,你需要显式设置 reload off:
:8080
php {
root /var/www/myapp/public
index index.php
reload off # ← 关键:彻底禁用文件变更监听与自动重载
}
⚠️ 注意:
reload off必须写在php { ... }块内,且不能与其他reload参数(如reload *.php)共存;一旦出现,优先级以最后声明为准。
补充说明与建议
-
仅 worker 模式受此影响:如果你没启用
worker(即未配置php_worker或php -w启动),则根本不存在自动重载逻辑,无需操作。 -
确认是否启用了 worker:检查 Caddyfile 中是否包含
php_worker指令,或启动命令是否带-w参数。例如:frankenphp run -w -c ./Caddyfile
只有这种场景下
reload off才生效。 -
重载关闭后如何更新代码?
生产环境应配合部署流程手动重启 FrankenPHP 进程(如systemctl restart frankenphp或发送SIGUSR2信号),确保零旧代码残留,避免“部分加载新类、部分仍用旧实例”的不一致状态。 -
验证是否生效:启动后查看日志,若不再出现类似
Watching files for changes...或Reload triggered by ...的输出,即表示已关闭。
其他可选优化项(协同生效)
- 禁用调试相关扩展(如 Xdebug、blackfire)
- 设置
opcache.enable=1且opcache.validate_timestamps=0(配合opcache.revalidate_freq=0) - 在
php块中添加env APP_ENV=production,让框架跳过开发模式的冗余检查
不需要修改 PHP 的 assert.* 或 max_execution_time 等运行时参数——它们和 worker 重载无关。
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











