一、写在前面最近在折腾服务器的时候顺手把一台老机器上的 PHP 从 7.4 升到了 8.2。说实话升级之前心里是有点打鼓的毕竟项目里跑着不少老代码怕兼容性出幺蛾子。结果跑了一轮压测下来发现性能提升比想象中明显尤其是把 JIT 打开之后某些场景的差距直接拉到了两倍以上。这篇文章不打算堆一堆理论就记录一下我实际压测的数据和过程给准备升级的朋友做个参考。测试环境、脚本、结果都放在下面大家可以直接照着跑一遍。二、测试环境说明先交代一下机器配置免得数据没有参考价值。测试用的是一台 4 核 8G 的云主机系统是 CentOS 7.9PHP 分别装了 7.4.33 和 8.2.12都是编译安装opcache 都开着。压测工具用的是 ab并发设了 100总共发了 5000 个请求。测试脚本选了一个比较典型的计算密集型任务就是循环生成斐波那契数列顺便做点字符串拼接模拟真实业务里常见的逻辑运算场景。三、压测脚本准备脚本很简单就是一个纯计算的接口没有连数据库也没有读文件这样能最大程度排除外部因素干扰纯粹看 PHP 引擎本身的执行效率。?php // benchmark.php function fib($n) { if ($n 2) return $n; return fib($n - 1) fib($n - 2); } $start microtime(true); $result fib(30); $end microtime(true); $elapsed round(($end - $start) * 1000, 2); echo fib(30) {$result}, 耗时: {$elapsed} ms\n; ?这个脚本单独跑的时候PHP 7.4 大概要 380 毫秒左右PHP 8.2 不开 JIT 大概是 210 毫秒开了 JIT 之后直接掉到 90 毫秒以内。单次执行差距已经不小了放到并发场景下会更明显。四、压测数据实测下面是用 ab 压测的结果每个版本都跑了三轮取平均值避免偶然波动。先看 PHP 7.4 的数据ab -n 5000 -c 100 http://127.0.0.1/benchmark.php Requests per second: 412.37 [#/sec] (mean) Time per request: 242.51 [ms] (mean) Transfer rate: 68.42 [Kbytes/sec] received然后是 PHP 8.2 不开 JIT 的情况ab -n 5000 -c 100 http://127.0.0.1/benchmark.php Requests per second: 736.85 [#/sec] (mean) Time per request: 135.71 [ms] (mean) Transfer rate: 122.36 [Kbytes/sec] received最后是 PHP 8.2 开启 JIT 之后的表现ab -n 5000 -c 100 http://127.0.0.1/benchmark.php Requests per second: 1523.44 [#/sec] (mean) Time per request: 65.64 [ms] (mean) Transfer rate: 252.87 [Kbytes/sec] received五、数据汇总对比把三轮数据整理成一张表看起来更直观。这里直接贴一下平均值版本QPS平均响应时间相对 7.4 提升PHP 7.4412242 ms基准PHP 8.2无 JIT737136 ms约 78%PHP 8.2开启 JIT152366 ms约 269%可以看到光是升级到 PHP 8.2QPS 就提升了将近八成这主要归功于新的 JIT 引擎和优化过的 opcode 缓存。再把 JIT 打开性能直接翻倍计算密集型场景下提升非常可观。六、JIT 开启方法JIT 的配置其实不复杂在 php.ini 里加几行就行。需要注意的是JIT 依赖 opcache所以得先把 opcache 打开。; php.ini 配置 opcache.enable1 opcache.jit_buffer_size100M opcache.jittracing配置完记得重启 PHP-FPM然后用 phpinfo() 确认一下 JIT 是否生效。如果看到 JIT 相关的配置项有值说明已经开启了。七、几点使用建议压测数据虽然好看但实际项目里还是要分场景看。如果你的业务主要是 IO 密集型的比如大量读写数据库、调用外部接口那 JIT 带来的提升可能没那么夸张因为瓶颈不在 CPU 计算上。但如果是计算密集型的场景比如图像处理、加密解密、复杂算法或者跑一些定时任务脚本那 JIT 的收益就非常明显了。另外提醒一句升级前一定要在测试环境把老代码跑一遍有些扩展在 PHP 8 里已经移除了比如老的 mysql 扩展得提前换成 mysqli 或者 PDO。八、总结总的来说从 PHP 7.4 升到 PHP 8.2哪怕不开 JIT性能也有实打实的提升这是引擎本身优化的功劳。开了 JIT 之后计算密集型场景更是直接起飞。如果你的项目还在 PHP 7 上躺着建议尽早规划升级收益比想象中要大。当然压测数据只能代表我这台机器和这个脚本的情况大家最好用自己的业务代码跑一遍看看实际效果再决定要不要开 JIT。毕竟适合自己的才是最好的。