本文目录导读:

PHP 8.0+ 引入了 JIT(Just-In-Time)编译,可以显著提升 CPU 密集型任务的性能,以下是详细的开启方法:
检查 PHP 版本
首先确保 PHP 版本 ≥ 8.0:
php -v
修改 php.ini 配置
找到 php.ini 文件位置
php --ini
编辑 php.ini,添加/修改以下配置
; 启用 opcache(JIT 依赖 opcache) opcache.enable=1 opcache.enable_cli=1 ; JIT 相关配置 opcache.jit=tracing ; 推荐使用 tracing 模式 opcache.jit_buffer_size=100M ; JIT 缓冲区大小
配置说明
; opcache.jit 参数说明: ; - tracing(推荐):基于轨迹的 JIT,性能最好 ; - function:基于函数的 JIT ; - off:关闭 JIT ; opcache.jit_buffer_size: ; - 建议 100M-200M ; - 太小会导致 JIT 频繁刷新 ; - 太大浪费内存
验证 JIT 是否开启
方法1:使用 phpinfo()
创建测试文件:
<?php phpinfo();
在浏览器或命令行访问,搜索 "JIT" 相关信息。
方法2:命令行检查
php -i | grep -i jit
方法3:编写测试脚本
<?php var_dump(opcache_get_status()['jit']);
完整配置示例
; 生产环境推荐配置 opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=2 opcache.fast_shutdown=1 ; JIT 配置 opcache.jit=tracing opcache.jit_buffer_size=100M ; 可选:指定 JIT 调试级别 ; opcache.jit_debug=0
性能测试对比
<?php
// 测试 JIT 性能
$start = microtime(true);
// 计算密集型任务
$sum = 0;
for ($i = 0; $i < 1000000; $i++) {
$sum += sqrt($i);
}
$end = microtime(true);
echo "执行时间: " . ($end - $start) . " 秒\n";
注意事项
-
重启服务:修改后需要重启 PHP-FPM 或 Apache
# PHP-FPM systemctl restart php-fpm # Apache systemctl restart apache2
-
Docker 环境:
# Dockerfile 示例 RUN docker-php-ext-install opcache # 或 RUN echo "opcache.enable=1\nopcache.jit=tracing\nopcache.jit_buffer_size=100M" >> /usr/local/etc/php/conf.d/opcache.ini
-
JIT 适用场景:
- ✅ CPU 密集型任务(计算、加密、图像处理等)
- ✅ 大量循环和数学计算
- ❌ IO 密集型任务(数据库查询、文件操作等)
-
性能提示:
- 不是所有应用都需要 JIT,PHP 8 的原生性能已经很优秀
- 对于 Web 应用,JIT 提升可能不明显
- 建议先测试再决定是否启用
常见问题
Q: 为什么 JIT 没生效?
- 检查 opcache.enable 是否为 1
- 检查 PHP 版本是否 ≥ 8.0
- 检查是否重启了服务
Q: JIT 和 opcache 的区别?
- opcache:缓存编译后的字节码
- JIT:将热点代码编译为机器码,进一步优化性能