FrankenPHP默认启用OPcache,但需通过php.ini手动配置关键参数并验证生效;worker模式下必须设opcache.enable=1,且部署后需调用opcache_reset()或重启服务以刷新缓存。

FrankenPHP 默认启用 OPcache,但需手动确认并根据实际负载调整关键参数。它运行在 PHP SAPI 的 embed 或 cli 模式(尤其 worker 模式下),因此不能依赖传统 web 服务器(如 Apache/Nginx)的 .htaccess 或 php_admin_flag 配置方式,所有设置必须通过 php.ini 或 ini_set()(有限制)生效。
确认 OPcache 是否已启用
在 FrankenPHP 容器或宿主机中执行:
-
php -m | grep opcache—— 若输出opcache,说明模块已加载 -
php -i | grep "opcache.enabled"—— 查看是否为On - 访问
/frankenphp/status(若启用了状态页)或添加临时路由输出opcache_get_status()结果
修改 php.ini 启用并调优核心参数
FrankenPHP 的 PHP 配置由基础镜像决定,推荐在构建镜像时覆盖 php.ini,或通过 Docker 的 php-ini-overrides.conf 方式注入。关键参数建议如下:
-
opcache.enable=1—— 必须开启(worker 模式下禁用将导致严重性能下降) -
opcache.memory_consumption=256—— 初始建议值(MB),高并发 WordPress 或 Laravel 应用可设为384~512 -
opcache.max_accelerated_files=20000—— 覆盖 Composer 自动加载文件数,TP6/WordPress 常超 10000,建议 ≥16000 -
opcache.interned_strings_buffer=16—— 字符串池大小(MB),避免 intern 冲突,≥12 即可 -
opcache.revalidate_freq=60—— 开发环境可设为0(每次请求校验),生产环境建议60~180秒 -
opcache.validate_timestamps=1—— 生产环境保持开启,配合revalidate_freq;部署时可临时设为0并手动opcache_reset() -
opcache.save_comments=1—— Doctrine、PHPStan 等工具需要,若不用注解可关以节省内存 -
opcache.fast_shutdown=1—— 启用快速关闭流程,减少 worker 退出延迟
在 worker 模式下安全重置缓存
FrankenPHP 的 worker 进程长期驻留,OPcache 不会自动感知文件变更。部署新代码后,需主动刷新:
立即学习“PHP免费学习笔记(深入)”;
- 调用
opcache_reset()—— 只影响当前 worker 进程,推荐在健康检查端点或部署脚本中触发 - 重启整个 FrankenPHP 服务(如
docker restart frankenphp)—— 更彻底,适用于多 worker 场景 - 避免使用
opcache_invalidate()逐文件清理,worker 模式下易引发不一致
验证调优效果
上线后观察两个指标:
-
opcache_get_status()['opcache_statistics']['oom_count'] === 0—— 表示内存未耗尽,否则需增大memory_consumption -
opcache_get_status()['opcache_statistics']['hits'] / (hits + misses) > 0.98—— 缓存命中率应稳定在 98% 以上,低于 95% 需检查max_accelerated_files或文件路径变动频率



















