启用 opcache.file_cache、opcache.file_cache_only=1 和 opcache.validate_timestamps=0 三者组合,可使 OPcache 在服务重启后从磁盘加载预编译字节码,实现冷启动加速。

✅ 必须启用的文件缓存基础配置
在 php.ini 中设置以下几项(缺一不可):
-
opcache.file_cache:指定一个可写、有足够空间的绝对路径(如
/var/www/.opcache),OPcache 会在此目录下生成时间戳子目录存放缓存文件 - opcache.file_cache_only=1:强制仅使用文件缓存(禁用共享内存),这是实现重启后复用的前提
- opcache.validate_timestamps=0:关闭运行时文件变更检测(否则每次请求都可能触发重编译,抵消缓存价值)
- opcache.enable=1 且 opcache.enable_cli=1(建议):确保 Web 和 CLI 环境均生效
⚠️ 注意:这不是“内存缓存不丢”,而是“冷启动加速”
OPcache 内存缓存(opcache.memory_consumption)在 PHP 进程终止后必然清空。所谓“重启后缓存保留”,实际指:
- PHP-FPM/Apache 启动时,OPcache 自动扫描
opcache.file_cache目录下最新有效的时间戳子目录 - 将其中缓存的 opcode 文件批量加载进新进程的共享内存
- 整个过程无需人工干预,但首次请求会有轻微延迟(比完全无缓存快,比热缓存慢)
? 补充建议:提升稳定性和可维护性
-
定期清理旧缓存目录:启用
opcache.file_cache_only=1后,每次代码变更或服务重启都会新建时间戳目录,旧目录不会自动删除。建议搭配定时脚本(如每天执行一次find /var/www/.opcache -mindepth 1 -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;)防止 inode 耗尽 -
确保目录权限正确:PHP 进程用户(如
www-data或nginx)必须对opcache.file_cache目录有读、写、执行权限 -
避免混用内存与文件缓存:不要同时设
opcache.file_cache_only=0和opcache.file_cache,否则文件缓存仅作备份,不参与加载逻辑

















