PHP如何启用OPcache优化解释器_PHP启OPcache优化解释器法【缓存】

12次阅读

php启用OPcache是生产环境必备配置,需手动开启并合理设置memory_consumption、max_accelerated_files等参数,重启服务后通过opcache_get_status验证命中率>80%才算生效。

PHP如何启用OPcache优化解释器_PHP启OPcache优化解释器法【缓存】

PHP 启用 OPcache 不是“可选优化”,而是生产环境的必备配置——它直接把 PHP 脚本编译后的 opcode 缓存进内存,跳过重复解析和编译,通常能降低 30%–50% 的 CPU 消耗和请求延迟。没开 OPcache 的 PHP 服务,相当于每次请求都重读、重解析、重编译全部代码。

确认 OPcache 是否已安装并启用

很多人以为装了 PHP 就自带 OPcache,其实从 PHP 5.5 开始才默认编译进核心,但默认 opcache.enable=0(即关闭)。必须手动开启。

  • 运行 php -m | grep opcache,有输出说明已加载模块
  • 运行 php -i | grep "opcache.enable",若返回 opcache.enable => Off,说明虽存在但未启用
  • 检查 php.ini 中是否误加了 ;extension=opcache(分号注释会导致模块不加载)

关键配置项必须显式设置(不只是开开关)

仅设 opcache.enable=1 远不够。默认缓存大小只有 64MB、只缓存 2000 个脚本、且不校验文件修改时间——上线后改了代码却看不到效果,就是这个原因。

opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.validate_timestamps=1 opcache.enable_cli=0

说明:

立即学习PHP免费学习笔记(深入)”;

  • opcache.memory_consumption:建议至少 128(单位 MB),小项目 64 也够,大 laravel/wordPress 站点建议 256
  • opcache.max_accelerated_files:必须 ≥ 项目中 PHP 文件总数(可用 find /path/to/app -name "*.php" | wc -l 估算),否则会频繁淘汰缓存
  • opcache.revalidate_freq:设为 60 表示每 60 秒检查一次文件是否改动;开发环境可设为 0(每次请求都校验),但生产环境绝不能为 0
  • opcache.validate_timestamps=1 必须保持开启,否则改代码不生效;某些人为了“极致性能”关掉它,结果部署新版本后用户还在跑旧逻辑

重启 Web 服务后验证是否真正生效

改完 php.ini 必须重启 PHP-FPM 或 apache,否则配置不加载。验证不能只看 phpinfo() 里有没有 OPcache 区块,要看实时状态:

  • 新建一个 opcache-status.php,内容为:
  • 访问该脚本,看到命中率 > 80%、脚本数稳定上升,才算真正跑起来了
  • 常见失败现象:opcache_get_status() 报错或返回空数组 → 多半是 opcache.enable_cli=1 被误开(CLI 模式下该值应为 0),或 PHP-FPM 进程没重启

最常被忽略的一点:OPcache 的共享内存是按 PHP-FPM worker 进程隔离的,不是全局共享。如果用了 pm=dynamicpm.max_children 设得很大(比如 100),那实际内存占用opcache.memory_consumption × max_children。别光调大缓存,忘了算总内存账。

text=ZqhQzanResources