PHP 7.4 OPcache必须手动调优才能生效:需确认Web环境php.ini路径、用zend_extension=opcache.so启用、设opcache.enable=1、memory_consumption=256、max_accelerated_files=20000、validate_timestamps=0,并重启php74-fpm;预加载需绝对路径preload.php且仅含require_once,严禁副作用操作。

PHP 7.4 的 OPcache 配置不是“开了就行”,关键在于让缓存真正加载、不被踢出、且适配项目规模。默认配置对 Laravel、WordPress 或 Composer 项目几乎无效,必须手动调优。
确认启用并指向正确的 php.ini
宝塔或 Linux 环境下,CLI 和 Web(PHP-FPM)使用两套配置文件。改错文件等于没改:
- 在网站根目录建 info.php,内容为
<?php phpinfo(); ?>,用浏览器访问 - 搜索 Loaded Configuration File,复制显示的完整路径(如
/www/server/php/74/etc/php.ini) - 编辑该文件,在末尾添加或确认存在
[opcache]区块,并确保含以下两行(不可注释):zend_extension=opcache.soopcache.enable=1 -
注意:必须用
zend_extension,写成extension=opcache.so会静默失败
核心参数必须调高(非默认值)
宝塔“一键启用”给的 max_accelerated_files=2000 和 memory_consumption=128 在现代项目中极易打满,导致缓存频繁淘汰、CPU 升高:
-
opcache.memory_consumption=256(单位 MB;中小型站起步 192,插件/包多建议 256) -
opcache.max_accelerated_files=20000(质数更优,如 7963 或 19997;避免哈希冲突,WordPress 或 vendor 超 15000 文件时必调) -
opcache.validate_timestamps=0(生产环境必须关,否则每次请求都 stat 文件,加速变减速) -
opcache.revalidate_freq=60(仅当validate_timestamps=1时生效;设为 0 反而更慢) -
opcache.fast_shutdown=1和opcache.enable_cli=0(CLI 不开更安全,避免干扰部署脚本)
预加载(Preload)让类定义常驻内存
PHP 7.4+ 的预加载不是“锦上添花”,而是消除自动加载开销的关键一步,但配置极敏感:
立即学习“PHP免费学习笔记(深入)”;
- 在
[opcache]区块中添加:opcache.preload=/var/www/myapp/preload.php(必须绝对路径,相对路径、./、~/全部静默失效) -
preload.php中只允许:require_once或include_once加载类文件;或更安全的opcache_compile_file() -
严禁:实例化(
new)、静态调用(SomeClass::init())、echo、file_get_contents()、class_exists()等任何运行时操作 - 推荐顺序:先加载框架核心(如
vendor/laravel/framework/src/Illuminate),再服务提供者,最后业务类;依赖错位会导致 PHP-FPM 启动失败 - 验证是否成功:
opcache_get_status()['preloaded_scripts']查看实际预加载了哪些文件
重启与验证缺一不可
改完配置不重启 = 白改;只重载 Nginx 或点宝塔“保存” = 不生效:
- 必须完整重启 PHP-FPM:
sudo systemctl restart php74-fpm(注意服务名是php74-fpm,不是php-fpm) - 刷新
info.php,搜索 Opcode Caching,状态必须为 Enabled - 网页中执行:
<?php print_r(opcache_get_status()); ?>,检查opcache_enabled为 true、memory_usage和interned_strings_usage有合理占用



















