当前位置:首页 > PHP > 正文内容

php8开启jit,php8配置jit,如何在PHP8中设置开启JIT

高老师6年前 (2020-11-08)PHP5400

PHP配置jit,PHP 8在PHP的内核中添加了JIT编译器,可以极大地提高性能。更强的cpu密集处理,或许以后php也可以适当做复杂协议解析。

首先,仅在启用opcache的情况下,JIT才有效,这是大多数PHP安装的默认设置,但您应确保opcache.enable在php.ini文件中将其设置为1 。通过opcache.jit_buffer_size设置JIT。

请注意,如果您通过命令行运行PHP,则还可以通过-d标志传递这些选项,而不是将它们添加到php.ini,例如

php -dopcache.enable=1 -dopcache.jit_buffer_size=100M

如果不包含此指令,那么默认值将设置为0,并且JIT将不会运行。

如果要在CLI脚本中测试JIT,则需要使用opcache.enable_cli配置项来启用opcache

php -dopcache.enable_cli=1 -dopcache.jit_buffer_size=100M

opcache.enable和opcache.enable_cli配置项的区别是如果要运行内置的PHP服务器,则应使用第一个。如果您实际上正在运行CLI脚本,则需要使用opcache.enable_cli。

在继续之前,让我们确保JIT确实有效,创建一个可通过浏览器或CLI访问的PHP脚本(取决于您测试JIT的位置),并查看以下输出

var_dump(opcache_get_status()['jit']);

正常输出如下

array:7 [
  "enabled" => true
  "on" => true
  "kind" => 5
  "opt_level" => 4
  "opt_flags" => 6
  "buffer_size" => 4080
  "buffer_free" => 0
]

如果enabled和on是正确的,那就ok了!

我们进一步来配置优化级别|JIT触发器|寄存器分配|CPU特定的优化标志,opcache.jit配置项专门配置这些。

配置的顺序是:CPU特定的优化标志、寄存器分配、JIT触发器、优化级别,官方给的推荐值为1255,例如:

opcache.enable=1 
opcache.jit=1255

来看看1255分别意味着什么。

CPU特定的优化标志:

0	没有
1个	启用AVX指令生成

R-寄存器分配:

0	不执行寄存器分配
1个	使用本地线性扫描寄存器分配器
2	使用全局线性扫描寄存器分配器

JIT触发器:

0	JIT在第一次脚本加载时的所有功能
1个	首次执行时的JIT函数
2	在第一个请求时进行概要分析,并在第二个请求时编译热功能
3	动态分析并编译热功能
4	在文档注释中使用@jit标记编译函数
5	跟踪JIT

O-优化级别:

0	不要准时
1个	最小JIT(调用标准VM处理程序)
2	选择性VM处理程序内联
3	基于单个函数的静态类型推断的优化JIT
4	静态类型推断和调用树的优化JIT
5	基于静态类型推断和内部过程分析的优化JIT

无论如何,内部人员建议将其1255作为最佳默认设置,因此,您的ini设置(或-d标志)应具有以下值:

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

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/189.html

分享给朋友:

“php8开启jit,php8配置jit,如何在PHP8中设置开启JIT” 的相关文章

php异步信号处理

php异步信号处理

php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){  //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...

在MyISAM引擎中使用事务会怎样

在MyISAM引擎中使用事务会怎样

众所周知MyISAM引擎不支持事务,但是我只是知道不支持事务,并未测试具体的表现是什么,测试代码如下:try {     //开启事务     Db::startTrans();    &...

php爬虫执行js,php执行js

php爬虫执行js,php执行js

当我们使用php爬虫采集网站时经常会遇到内容使用ajax异步加载。一般采取的方案是PHP模拟再请求api接口获取数据,但是有时候前端js加密非常麻烦,我们需要将js的加密方法转换为php方法方便curl请求。当然通过了解我们可以通过3种方案解决。第一种:使用phpv8js扩展执行js代码。(pecl...

php redis队列实现秒杀 , php用redis 实现秒杀功能

php redis队列实现秒杀 , php用redis 实现秒杀功能

为什么使用队列?因为pop取队列具有原子性。假如我们需要秒杀一个商品id,我们先将商品的库存保存到一个队列。例如:<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6...

php位运算符详解

php位运算符详解

文章篇幅较长,如果不喜欢看文章的,此处抛出韩顺丰老师的位运算视频,韩老师应该是全网讲php位运算符最详细的一个老师了。链接:https://pan.baidu.com/s/14xj7er8eVSUcJ-jYXyA0GA  提取码:731m 链接:https://pan.baidu.com...

PHP RSA密文过长加密解密,PHP RSA证书大小自动适配,PHP RSA分段加密

PHP RSA密文过长加密解密,PHP RSA证书大小自动适配,PHP RSA分段加密

项目中需要加密超长json内容才发现rsa加密长度有限制,于是换一种思路:我们将原本需要加密的内容拆分为多个字符串,一段一段的加密,解密端也是一段一段的解密即可完成。(1).确认每次加密多少长度首先我们要知道rsa加密长度是多少,1024位的rsa能加密的长度也是1024位。那么我们一次加密多长的字...