如何在 php.ini 中正确开启 PHP 8 的 JIT 编译功能?

文章导读
PHP 8 的 JIT 编译器默认未开启,正确配置后数学计算性能可从 5.88 秒降至 1.04 秒,提升约 82%。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

PHP 8 的 JIT 编译器默认未开启,正确配置后数学计算性能可从 5.88 秒降至 1.04 秒,提升约 82%。

原因分析

PHP 8 引入的 JIT(Just-In-Time)编译器集成在 OPcache 扩展中,默认关闭是出于谨慎考虑。根据 2024 年 12 月 23 日的技术资料,JIT 编译器虽然能提升性能,但会带来启动速度变慢和内存消耗增加的开销,对资源受限环境可能不可接受。JIT 的工作原理是在运行时将 PHP 字节码编译为机器码,通过 LLVM(Low Level Virtual Machine)实现,避免传统解释执行的开销。但 JIT 完全依赖 opcache 启用,若 opcache.jit_buffer_size 设为 0 或不配置,JIT 将直接跳过初始化。

解决方案

步骤一:确认 PHP 版本

首先确保 PHP 版本为 8.0 及以上,JIT 编译器仅在 PHP 8+ 可用。通过命令行执行php -v查看版本,输出应包含PHP 8.x.x字样。根据 2020 年 7 月 10 日的编译记录,PHP 8.0 Alpha 1 于 2020 年 6 月 25 日发布。

步骤二:修改 php.ini 配置

编辑 php.ini 文件,设置以下核心参数(根据 2026 年 4 月 17 日技术文档):

opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=100M
opcache.jit=1255

关键配置说明:opcache.enable 和 opcache.enable_cli 必须都为 1,很多线上环境只开了 opcache.enable=1,但 CLI 脚本(如 PHPUnit、Artisan)默认 opcache.enable_cli=0 不会触发 JIT。opcache.jit_buffer_size 最小有效值是 1M,但推荐从 64M 起步,生产环境可设 100M 或 256M。opcache.jit=1255 是当前社区较稳的推荐值,四位数字分别控制:第 1 位(1)启用 AVX 指令,第 2 位(2)使用全局线性扫描寄存器分配器,第 3 位(5)动态分析并编译热功能,第 4 位(5)优化级别。

步骤三:重启服务

修改配置后需重启 PHP 服务使更改生效。对于 php-fpm,执行pkill -USR2 php-fpm;对于内置服务器,直接重启即可。根据 2024 年 6 月 22 日博客园记录,重启后运行 phpinfo() 可查看 JIT 状态。

步骤四:验证 JIT 是否生效

使用以下方法验证(来自 2023 年 10 月 19 日技术文档):

<?php
var_dump(opcache_get_status()['jit']['enabled']);
?>

正常输出应为bool(true)。也可执行php -v,输出应包含with Zend OPcache v8.x.x。开发环境可加opcache.jit_debug=1,PHP 会在 stderr 输出 JIT 编译日志,例如jit: compiled func foo (234 bytes)

注意事项

根据多个技术来源的真实用户反馈,以下是常见踩坑点:

1. 32 位系统或低内存容器需谨慎配置 opcache.jit_buffer_size,超限会静默失败且无报错,JIT 不工作(2026 年 4 月 17 日资料)。

如何在 php.ini 中正确开启 PHP 8 的 JIT 编译功能?

2. JIT 对代码结构敏感,满屏 eval()、动态函数名、__call 重载多的代码,JIT 很难生成有效机器码,不是所有场景都能获得性能提升(2026 年 4 月 17 日资料)。

3. opcache.jit=tracing 是旧版写法,PHP 8.0+ 已废弃,必须用数字编码如 1205、1235、1255(2026 年 4 月 17 日资料)。

4. I/O 密集型应用(如 Web 应用)JIT 提升可能相对较小,CPU 密集型任务(图像处理、数据分析)效果更显著(2025 年 8 月 2 日资料)。

5. 命令行测试需显式加 opcache.enable_cli=1,否则 PHPUnit、Artisan 等 CLI 工具不会触发 JIT(2026 年 4 月 17 日资料)。

参考来源

来源:博客园 - php8 开启 jit 性能测试(关闭 JIT 5.88 秒,打开 JIT 1.04 秒)

来源:技术文档库 - 如何配置 PHP 8.0 的 JIT 特性(2026 年 4 月 17 日,opcache.jit 四位数字详解)

来源:PHP 官方下载页面 - PHP 8.0 Alpha 1 发布记录(2020 年 6 月 25 日)

来源:技术社区 - PHP8 新特性深度解读(2025 年 8 月 2 日,JIT 适用场景分析)