欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > JIT+Opcache如何配置才能达到性能最优

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

2025/5/14 17:59:20 来源:https://blog.csdn.net/xzp19841203xzp/article/details/147932239  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词