JIT+Opcache如何配置才能达到性能最优

news2025/5/14 18:01:49

首先打开php.ini文件,进行配置

1、OPcache配置

; 启用OPcache
opcache.enable=1

; CLI环境下启用OPcache(按需配置)
opcache.enable_cli=0

; 预加载脚本(PHP 7.4+,加速常用类)
; opcache.preload=/path/to/preload.php

; 分配内存大小(根据项目大小调整,建议128M-512M)
opcache.memory_consumption=256

; 最大缓存文件数(建议设置为项目文件数+冗余)
opcache.max_accelerated_files=10000

; 内存"浪费"达到此百分比会执行重启
opcache.max_wasted_percentage=10

; 不检查文件修改时间(生产环境推荐关闭),更新代码时,重启php-fpm
opcache.validate_timestamps=0

; 每隔多少秒检查文件更新(若开启验证,建议较大值)
opcache.revalidate_freq=60

; 优化字符串存储,(约16MB)适合中型应用
opcache.interned_strings_buffer=16

; 快速关闭机制
opcache.fast_shutdown=1

; 文件缓存路径(为空表示仅内存缓存)
opcache.file_cache=/tmp/opcache

; 启用文件缓存(生产环境推荐)
opcache.file_cache_only=0

; 优化级别(0-7,推荐0)
opcache.optimization_level=0x7FFFBFFF

; 防止脚本重复缓存
opcache.dups_fix=0

; 记录缓存命中率(调试用)
opcache.record_warnings=0

; 启用保护模式
opcache.protect_memory=0

; 锁定内存(避免交换)
opcache.lockfile_path=/tmp


; 高级优化
opcache.opt_debug_level=0
opcache.enable_file_override=1
opcache.preload=/path/to/preload.php  ; 预加载脚本(可选)
opcache.huge_code_pages=1             ; 启用大内存页(Linux)

2、JIT配置

; 启用JIT并分配缓冲区(建议100M以上)
opcache.jit_buffer_size=100M

; JIT模式
opcache.jit=1255 ; JIT 模式(1255 是推荐值)

; 关闭调试
opcache.jit_debug=0

; 生产环境关闭分析          
opcache.jit_profiling=0               

opcache.jit模式讲解:

2.1 数字组合模式

opcache.jit 的值通常由 4 位数字组成(如 1255),每位数字代表不同的编译策略:

第一位:是否使用 AVX 指令(需 CPU 支持)

  • 0:禁用 AVX 指令
  • 1:启用 AVX 指令(推荐)

第二位:寄存器分配策略

  • 0:禁用寄存器分配
  • 1:局部(Block 级)分配
  • 2:全局(Function 级)分配(推荐)

第三位:JIT 触发策略

  • 0:脚本加载时编译所有代码
  • 1:函数首次执行时编译
  • 2:基于调用频率编译(推荐结合 opcache.prof_threshold 使用)
  • 3:函数执行超过阈值(opcache.jit_hot_func)后编译
  • 4:通过 @jit 注释手动触发编译
  • 5:基于循环/返回的热点追踪(推荐)

第四位:优化级别

  • 0:禁用优化
  • 1:基础优化(如跳转优化)
  • 5:最高优化(脚本级类型推断、SSA 优化等,推荐)

2.2 关键字模式

PHP 8.0+ 支持简写关键字:

  • disable:禁用 JIT(默认值)
  • tracing:追踪模式(积极优化循环和热点代码)
  • function:函数级优化(平衡性能与资源消耗)
  • on:保守策略(仅优化高频代码片段)

2.3 推荐配置

最佳性能模式:1255 #计算密集型任务(如数学运算、循环处理)

通用推荐模式:tracing #Web 服务、高并发场景

保守模式:function 或 on #资源受限环境或对启动速度敏感的应用

3、检查opcache是否起作用

执行如下命令

php -r 'print_r(opcache_get_status());'

输出值如下

Array
(
    [opcache_enabled] => 1 // OPcache 是否启用
    [cache_full] =>  // 缓存是否已满
    [restart_pending] =>  // 是否有重启挂起(如手动触发重启)
    [restart_in_progress] =>  // 是否正在重启
    [memory_usage] => Array // 内存使用情况
        (
            [used_memory] => 39923984 //已使用的内存量(字节)
            [free_memory] => 228511472 //剩余可用内存(字节)
            [wasted_memory] => 0 //因碎片化等原因浪费的内存(字节),若 wasted_memory 过高,尝试调整 opcache.fast_shutdown
            [current_wasted_percentage] => 0 //浪费内存占总内存的百分比(理想应接近 0)
        )

    [interned_strings_usage] => Array // 内部字符串缓存信息(PHP 7+)
        (
            [buffer_size] => 25165360 //字符串缓存区总大小(字节)
            [used_memory] => 508264 //已使用的内存量
            [free_memory] => 24657096 //剩余可用内存
            [number_of_strings] => 10625 //缓存的字符串数量
        )

    [opcache_statistics] => Array // 统计信息(含命中率)
        (
            [num_cached_scripts] => 0 //已缓存的脚本数量,接近 max_cached_keys 时可能需要调整配置。
            [num_cached_keys] => 0 //当前缓存的脚本数量
            [max_cached_keys] => 130987 //最大可缓存键数(由 opcache.max_accelerated_files 定义)
            [hits] => 0 //命中次数
            [start_time] => 1747137944 //OPcache 启动时间戳(秒)
            [last_restart_time] => 0 //最后一次重启时间戳(未重启时为 0)
            [oom_restarts] => 0 //因内存不足(OOM)触发的重启次数
            [hash_restarts] => 0 //因哈希冲突触发的重启次数
            [manual_restarts] => 0 //手动调用 opcache_reset() 的重启次数。
            [misses] => 0 //未命中次数
            [blacklist_misses] => 0
            [blacklist_miss_ratio] => 0
            [opcache_hit_rate] => 0 //越高越好(理想值 > 95%,低于 80% 需检查配置或代码更新频率)。
        )

    [scripts] => Array (// 已缓存的脚本详情
       ["/var/www/index.php"] => Array (
        "full_path" => "/var/www/index.php",//脚本的完整路径
        "hits" => 10,//该脚本的缓存命中次数
        "memory_consumption" => 32768,//该脚本占用的内存量(字节)
        "last_used" => "Tue May 14 10:00:00 2024" //最后一次访问时间(如 "Tue May 14 10:00:00 2024")
    )
)
    [jit] => Array
        (
            [enabled] => 1
            [on] => 1
            [kind] => 0
            [opt_level] => 5
            [opt_flags] => 6
            [buffer_size] => 134217712
            [buffer_free] => 134215280
        )

)

4、缓存清理

# 每天凌晨清理缓存
0 3 * * * /usr/bin/php /path/to/your/project/think optimize:clear >> /dev/null 2>&1

# 每周重建OPcache
0 4 * * 1 /usr/bin/systemctl restart php-fpm >> /dev/null 2>&1

#通过cronjob每天低峰期重启PHP-FPM:
0 4 * * * /bin/systemctl restart php-fpm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2375562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebpackVite总结篇与进阶

模块化 Webpack Webpack 入口entry 分离app和第三方库入口 这是什么? 这是告诉 webpack 我们想要配置 2 个单独的入口点(例如上面的示例)。 为什么? 这样你就可以在 vendor.js 中存入未做修改的必要 library 或文件&#xff0…

【python】基础知识点100问

以下是Python基础语法知识的30条要点整理,涵盖数据类型、函数、控制结构等核心内容,结合最新资料归纳总结: 基础30问 一、函数特性 函数多返回值 支持用逗号分隔返回多个值,自动打包为元组,接收时可解包到多个变量 def func(): return 1, "a" x, y = func()匿…

SpringBoot--springboot简述及快速入门

spring Boot是spring提供的一个子项目,用于快速构建spring应用程序 传统方式: 在众多子项目中,spring framework项目为核心子项目,提供了核心的功能,其他的子项目都需要依赖于spring framework,在我们实际…

vscode_python远程调试_pathMappings配置说明

1.使用说明 vscode python 远程调试pathMappings 配置 launch.json "pathMappings": [{"localRoot": "本地代码目录","remoteRoot": "远程代码目录" # 注意不是运行目录, 是远程代码的目录}],2.测试验证 测试目的: 远程代…

遨游5G-A防爆手机:赋能工业通信更快、更安全

在工业数字化转型与5G-A商用进程加速的双重驱动下,中国防爆手机市场正迎来历史性发展机遇。作为“危、急、特”场景通信解决方案服务商,遨游通讯深刻洞察到:当5G-A网络以超高速率、海量连接和毫秒级时延重塑行业生态时,防爆手机这…

Profibus DP主站与Modbus RTU/TCP网关与海仕达变频器轻松实现数据交互

Profibus DP主站与Modbus RTU/TCP网关与海仕达变频器轻松实现数据交互 Profibus DP主站转Modbus RTU/TCP(XD-MDPBm20)网关在Profibus总线侧实现主站功能,在Modbus串口侧实现从站功能。可将ProfibusDP协议的设备(如:海…

「华为」人形机器人赛道投资首秀!

温馨提示:运营团队2025年最新原创报告(共210页) —— 正文: 近日,【华为】完成具身智能赛道投资首秀,继续加码人形机器人赛道布局。 2025年3月31日,具身智能机器人头部创企【千寻智能&#x…

格雷希尔G10和G15系列自动化快速密封连接器,适用于哪些管件的密封,以及它们相关的特性有哪些?

格雷希尔G10和G15系列快速密封连接器,用于自动化和半自动化过程中的外部或内部密封,通过使用气压驱动来挤压内部的密封圈,创造一个适用于各种管件的无泄漏密封连接,连接器内部的弹性密封圈可以提供其他产品不能提供的卓越密封性能…

专栏特辑丨悬镜浅谈开源风险治理之SBOM与SCA

随着容器、微服务等新技术日新月异,开源软件成为业界主流形态,软件行业快速发展。但同时,软件供应链也越来越趋于复杂化和多样化,软件供应链安全风险不断加剧。 软件供应链安全主要包括软件开发生命周期和软件生存运营周期&#x…

vue3项目创建-配置-elementPlus导入-路由自动导入

目录 方法一:create-vue 方法二 :Vite Vue Vite.config.ts配置 引入element-plus 安装 如何在项目中使用 Element Plus 完整引入 按需导入 vue3vite中自动配置路由的神器:vite-plugin-pages 1. 安装 2、修改vite.config.js中配置…

MUSE Pi Pro 编译kernel内核及创建自动化脚本进行环境配置

视频讲解: MUSE Pi Pro 编译kernel内核及创建自动化脚本进行环境配置 今天分享的主题为创建自动化脚本编译MUSE Pi Pro的kernel内核,脚本已经上传到中 GitHub - LitchiCheng/MUSE-Pi-Pro-Learning: MUSE-Pi-Pro-Learning ,有需要可以自行clon…

Innovus 25.1 版本更新:助力数字后端物理设计新飞跃

在数字后端物理设计领域,每一次工具的更新迭代都可能为项目带来巨大的效率提升与品质优化。今天,就让我们一同聚焦 Innovus 25.1 版本(即 25.10 版本)的更新要点,探寻其中蕴藏的创新能量。 一、核心功能的强势进 AI…

CodeBuddy 中国版 Cursor 实战:Redis+MySQL双引擎驱动〈王者荣耀〉战区排行榜

文章目录 一、引言二、系统架构设计2.1、整体架构概览2.2、数据库设计2.3、后端服务设计 三、实战:从零构建排行榜3.1、开发环境准备3.2、用户与战区 数据管理3.2.1、MySQL 数据库表创建3.2.2、实现用户和战区数据的 CURD 操作 3.3、实时分数更新3.4、排行榜查询3.5…

在线SQL转ER图工具

在线SQL转ER图网站 在数据库设计、软件开发或学术研究中,ER图(实体-关系图) 是展示数据库结构的重要工具。然而,手动绘制ER图不仅耗时费力,还容易出错。今天,我将为大家推荐一款非常实用的在线工具——SQL…

python高级特性

json.dumps({a:1,n:2}) #Python 字典类型转换为 JSON 对象。相当于jsonify data2 json.loads(json_str)#将 JSON 对象转换为 Python 字典 异步编程:在异步编程中,程序可以启动一个长时间运行的任务,然后继续执行其他任务,而无需等…

汇编:子程序设计

一、 实验要求 实验目的: 熟练掌握算术运算汇编指令的使用熟练掌握子程序设计的基本方法熟练掌握程序的调试方法 实验内容: 编程实现两个数:#8888H和#79H的乘除运算结合实验1的代码,将加减乘除四则运算写成四个子程序&#xff…

从概念表达到安全验证:智能驾驶功能迎来系统性规范

随着辅助驾驶事故频发,监管机制正在迅速补位。面对能力表达、使用责任、功能部署等方面的新要求,行业开始重估技术边界与验证能力,数字样机正成为企业合规落地的重要抓手。 2025年以来,围绕智能驾驶功能的争议不断升级。多起因辅…

DeepSeek基于注意力模型的可控图像生成

DeepSeek大模型高性能核心技术与多模态融合开发 - 商品搜索 - 京东 图像的加噪与模型训练 在扩散模型的训练过程中,首先需要对输入的信号进行加噪处理,经典的加噪过程是在图像进行向量化处理后在其中添加正态分布,而正态分布的值也是与时间…

“端 - 边 - 云”三级智能协同平台的理论建构与技术实现

摘要 随着低空经济与智能制造的深度融合,传统集中式云计算架构在实时性、隐私保护和资源效率上的瓶颈日益凸显。本文提出“端 - 边 - 云”三级智能协同平台架构,以“时空 - 资源 - 服务”三维协同理论为核心,构建覆盖终端感知、边缘计算、云端…

AI时代,如何实现人机共舞?

在科技飞速发展的当下,人工智能(AI)已不再是科幻作品中的遥远想象,而是深入渗透到我们生活与工作的方方面面。从智能手机中的语音助手,到金融领域的风险预测模型;从医疗影像的智能诊断,到工业生…