PHP 8 的 JIT 编译器深度集成于 OPcache,仅加速高频执行的 CPU 密集型代码;启用需三步:开启 OPcache、设置 jit_buffer_size≥1M、配置有效 jit 模式(如 1235);并同步调优 validate_timestamps=0 等参数以保障 JIT 复用。

PHP 8 的 JIT 编译器不是独立开关,而是深度集成在 OPcache 中的运行时优化能力。它只对高频执行的代码(如循环体、递归函数、数学运算)生效,对数据库查询、HTTP 请求等 I/O 操作无加速效果。配置关键在于激活 OPcache、分配缓冲区、设定编译策略,并同步调优配套参数。
基础三步:让 JIT 真正启动
缺一不可,否则 JIT 仍处于禁用状态:
-
启用 OPcache:确保
opcache.enable=1(Web 环境)且opcache.enable_cli=1(CLI 脚本或内置服务器); -
分配 JIT 缓冲区:设置
opcache.jit_buffer_size,最小值为1M,推荐生产环境设为128M或256M;值为 0 时 JIT 自动关闭; -
指定 JIT 模式:通过
opcache.jit设置有效值,例如tracing、1235或1255;0或留空即禁用。
JIT 模式与数值编码含义
opcache.jit 支持数字编码(如 1235)或字符串(如 tracing),四位分别控制不同行为:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 第一位(策略):0=禁用,1=tracing(追踪热点路径,适合含循环/递归逻辑),2=function(按函数粒度编译,适合小函数高频调用);
- 第二位(寄存器分配):2=启用全局线性扫描寄存器分配(推荐,提升数值计算效率);
- 第三位(触发方式):3=基于调用频次和循环次数动态编译(平衡灵敏度与开销),5=更激进的追踪+AVX 指令支持(适合科学计算);
-
常用组合:
1235(生产通用)、1255(数学密集型)、tracing(等价于1000,调试友好)。
配套参数必须同步调整
JIT 效果依赖稳定、长效的 OPcache 行为,以下参数直接影响 JIT 是否能复用已编译代码:
立即学习“PHP免费学习笔记(深入)”;
-
opcache.validate_timestamps=0:生产环境必须关闭,否则每次请求都校验文件修改时间,导致缓存失效、JIT 反复编译; -
opcache.revalidate_freq=60:开发环境可设为 60 秒,兼顾热更新与 JIT 复用; -
opcache.max_accelerated_files=20000:避免因文件数超限引发缓存驱逐,间接影响 JIT 缓存命中; -
opcache.jit_hot_loop=64:循环执行 ≥64 次即标记为热点(默认值,可微调至 32 或 128 视业务而定); -
opcache.jit_hot_func=127:函数被调用 ≥127 次后进入 JIT 编译队列。
验证 JIT 是否生效
重启 PHP-FPM 或 Web 服务后,执行以下命令确认:
-
php -v:输出中需含 JIT enabled 字样; -
php -r "var_dump(opcache_get_status()['jit']);":返回数组中enabled和on均为true,且buffer_used > 0,说明 JIT 正在工作并占用缓冲区。


















