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

首先打开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.mzph.cn/web/79675.shtml

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

相关文章

Python训练打卡Day23

机器学习管道 pipeline 基础概念 pipeline在机器学习领域可以翻译为“管道”,也可以翻译为“流水线”,是机器学习中一个重要的概念。 在机器学习中,通常会按照一定的顺序对数据进行预处理、特征提取、模型训练和模型评估等步骤,以…

GPU SIMT架构的极限压榨:PTX汇编指令级并行优化实践

点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、SIMT架构的调度哲学与寄存器平衡艺术 1.1 Warp Scheduler的调度策略解构 在NVIDIA GPU…

HarmonyOS 【诗韵悠然】AI古诗词赏析APP开发实战从零到一系列(二、项目准备与后台服务搭建)

在开发一款面向HarmonyOS平台的应用程序——【诗韵悠然】AI古诗词赏析APP时,选择了流行Go语言作为后端开发语言,并使用了go-zero微服务框架来搭建服务接口。本文将详细介绍项目准备和后台服务搭建的过程,帮助大家更好地理解和掌握go-zero框架…

QT5.14安装以及新建基础项目

进入qt中文网站:Qt | 软件开发全周期的各阶段工具 额,考虑新手可能还是找不到,我就分享一下我下载的的吧 通过网盘分享的文件:qt-opensource-windows-x86-5.14.2.exe 链接:https://pan.baidu.com/s/1yQTRp-b_ISje5B3UWb7Apw?pw…

深入解析 I/O 模型:原理、区别与 Java 实践

一、I/O 模型的核心概念 I/O 操作的本质是数据在用户空间(应用程序内存)和内核空间(操作系统内核内存)之间的传输。根据数据准备与拷贝阶段的处理方式不同,I/O 模型可分为以下五类: 阻塞 I/O(…

EMQX v5.0通过连接器和规则同步数据

1 概述 EMQX数据集成功能,帮助用户将所有的业务数据无需额外编写代码即可快速完成处理与分发。 数据集成能力由连接器和规则两部分组成,用户可以使用数据桥接或 MQTT 主题来接入数据,使用规则处理数据后,再通过数据桥接将数据发…

重构门店网络:从“打补丁“到“造地基“的跨越

您是否遇到过这样的窘境? 新店开张要等一周,就为装根网线; 偏远地区门店三天两头断网,顾客排长队却结不了账; 总部想看实时数据,结果收到一堆乱码报错; 总部ERP系统升级,2000家门…

PH热榜 | 2025-05-13

1. FirstQuadrant 标语:通过以人为本的人工智能来最大化B2B销售 介绍:销售人工智能,帮助创始人和收益团队提高效率,保持组织有序,并促成更多交易。它通过简化销售幕后工作,确保每个细节都不会遗漏。 产品…

【即插即用涨点模块】【上采样】CARAFE内容感知特征重组:语义信息与高效计算两不误【附源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

esp32硬件支持AT指令

步骤1:下载AT固件 从乐鑫官网或Git鑫GitHub仓库(https://github.com/espressif/esp-at)获取对应ESP32型号的AT固件(如ESP32-AT.bin)。 步骤2:安装烧录工具 使用 esptool.py(命令行工具&#…

【神经网络与深度学习】局部最小值和全局最小值

引言 在机器学习和优化问题中,目标函数的优化通常是核心任务。优化过程可能会产生局部最小值或全局最小值,而如何区分它们并选择合适的优化策略,将直接影响模型的性能和稳定性。 在深度学习等复杂优化问题中,寻找全局最小值往往…

链表的面试题4之合并有序链表

这篇文章我们继续来讲链表中很经典的面试题:合并有序链表。 目录 迭代 递归 我们首先来看一下这张图片里面的要求,给你两个链表,要求把他们按照从小到大的方式排列。 这里涉及到几个问题,首先,我们的头节点是不是要…

flea-cache使用之Redis哨兵模式接入

Redis哨兵模式接入 1. 参考2. 依赖3. 基础接入3.1 定义Flea缓存接口3.2 定义抽象Flea缓存类3.3 定义Redis客户端接口类3.4 定义Redis客户端命令行3.5 定义哨兵模式Redis客户端实现类3.6 定义Redis哨兵连接池3.7 定义Redis哨兵配置文件3.8 定义Redis Flea缓存类3.9 定义抽象Flea…

OpenAI for Countries:全球AI基础设施的“技术基建革命”

2025年5月7日,OpenAI宣布启动“OpenAI for Countries”计划,目标是为全球各国构建本土化的AI基础设施,提供定制化服务。这一计划被视为其“星际之门”项目的全球化延伸,以技术合作为核心,覆盖数据中心建设、模型适配与…

Linux精确列出非法 UTF-8 字符的路径或文件名

Docker构建的时候报错:failed to solve: Internal: rpc error: code = Internal desc = grpc: error while marshaling: string field contains invalid UTF-8 1、创建一个test.sh文件 find . -print0 | while IFS= read -r -d file;

FFmpeg在Android开发中的核心价值是什么?

FFmpeg 在 Android 开发中的核心价值主要体现在其强大的多媒体处理能力和灵活性上,尤其在音视频编解码、流媒体处理及跨平台兼容性方面具有不可替代的作用。以下是具体分析: --- 1. 强大的音视频编解码能力 - 支持广泛格式:FFmpeg 支持几乎所…

自我奖励语言模型:突破人类反馈瓶颈

核心思想 自我奖励语言模型提出了一种全新的语言模型对齐范式。传统方法如RLHF或DPO依赖人类反馈数据训练固定的奖励模型,这使模型的能力受限于人类标注数据的质量和数量。论文作者认为,要实现超人类能力的AI代理,未来的模型需要突破人类反馈…

5. 动画/过渡模块 - 交互式仪表盘

5. 动画/过渡模块 - 交互式仪表盘 案例&#xff1a;数据分析仪表盘 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style type"text/css">.dashboard {font-family: Arial…

【前端三剑客】Ajax技术实现前端开发

目录 一、原生AJAX 1.1AJAX 简介 1.2XML 简介 1.3AJAX 的特点 1.3.1AJAX 的优点 1.3.2AJAX 的缺点 1.4AJAX 的使用 1.4.1核心对象 1.4.2使用步骤 1.4.3解决IE 缓存问题 1.4.4AJAX 请求状态 二、jQuery 中的AJAX 2.1 get 请求 2.2 post 请求 三、跨域 3.1同源策略…

SQL 索引优化指南:原理、知识点与实践案例

SQL 索引优化指南&#xff1a;原理、知识点与实践案例 索引的基本原理 索引是数据库中用于加速数据检索的数据结构&#xff0c;类似于书籍的目录。它通过创建额外的数据结构来存储部分数据&#xff0c;使得查询可以快速定位到所需数据而不必扫描整个表。 索引的工作原理 B-…