frankenphp 默认启用 opcache,但需通过 phpinfo() 或 opcache_get_status() 确认其在 worker 模式下真正生效;配置须设 opcache.enable=1、memory_consumption≥256mb、max_accelerated_files 适配项目规模,并用 sighup 重启 worker 实现安全刷新。

FrankenPHP 默认已启用 OPcache,但必须确认它在当前运行模式下真正生效——尤其是使用 worker 模式(常驻内存)时,OPcache 行为与传统 PHP-FPM 有关键差异。
确认 OPcache 是否已在 FrankenPHP 中加载并工作
FrankenPHP 基于嵌入式 PHP 运行时,不依赖外部 PHP-FPM,因此验证方式需适配其架构:
- 运行
frankenphp --version或php -v,看到with Zend OPcache仅表示编译支持,不代表启用 - 启动 FrankenPHP 后,访问应用内
phpinfo()页面,搜索 “OPcache”,确认 “Opcode Caching” 显示 Enabled - 在路由中添加调试脚本:
<?php var_dump(opcache_get_status()['opcache_enabled'] ?? false); ?>,返回true才算真正激活 - 注意:若用
frankenphp run启动 CLI 模式,默认不启用 OPcache;需显式加--opcache参数或配置文件启用
FrankenPHP 专用 OPcache 配置要点
FrankenPHP 使用自己的 php.ini 加载逻辑(优先读取项目根目录下的 php.ini 或环境变量指定路径),配置需满足以下条件:
-
opcache.enable=1必须设为 1(不是On),且不能被 CLI 专用配置覆盖 -
opcache.memory_consumption=256—— worker 模式下进程长期存活,建议比常规部署更高(中小项目 256 MB 起步) -
opcache.max_accelerated_files=20000—— Composer 项目务必调高,FrankenPHP 不自动探测文件数,需手动估算 -
opcache.validate_timestamps=1和opcache.revalidate_freq=2—— worker 模式下热更新敏感,设为 2 秒检查可兼顾性能与及时性(开发/预发环境) - 避免设置
opcache.enable_cli=1干扰主服务;CLI 子进程应继承主进程缓存,无需单独开启
worker 模式下刷新 OPcache 的正确方式
FrankenPHP 的 worker 是常驻进程,代码更新后不会自动重载缓存,但不能直接调用 opcache_reset()(可能影响其他请求):
- 推荐做法:部署时发送
SIGHUP信号重启 worker 进程,例如kill -SIGHUP $(pidof frankenphp) - 或使用
frankenphp stop && frankenphp start(适用于 systemd 管理场景) - 单文件更新可用
opcache_invalidate('/path/to/file.php', true),适合灰度发布 - 禁用
opcache.validate_timestamps=0—— 在 FrankenPHP 中极易导致静默失效,不建议生产使用
配合 FrankenPHP 特性的额外优化
发挥 FrankenPHP 架构优势,让 OPcache 效果最大化:
- 启用预加载(
opcache.preload):在php.ini中指定 preload 脚本,FrankenPHP 启动时一次性加载核心类,worker 复用更彻底 - 关闭
opcache.save_comments=0(除非用注解路由),减少内存占用 - 搭配
frankenphp.worker.max-requests=10000配置,确保 worker 在内存充足前提下长期复用 OPcache - 监控命中率:
opcache_get_status()['cache_full']应为false,opcache_get_status()['hits'] / (hits + misses)建议 > 95%
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











