简介:
OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。
PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。 对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL 扩展中的 OPcache 库。
大概的意思讲解:
没有开启之前每次都需要编译php脚本,这样cup和内存被消耗,Opcode cache 的目地是避免重复编译,减少 CPU 和内存开销。
也就是系统自动判断代码是否发生了改动,如果没有就没有必要再次编译了,直接从内存里面获取,减少了步骤,把预编译的结果保存起来了。
安装:
yum install php73w-opcache.x86_64 #根据自己的系统和php版本进行命令调整
然后修改php.ini配置相关的opcache:
[Zend Opcache] ;粗枝大叶的你不要忘记了引入扩展文件哦 zend_extension=/这里有个马赛克/73/lib/php/extensions/你的目录/opcache.so ;启动操作码缓存 opcache.enable = 1 ;共享内存大小,单位为MB opcache.memory_consumption=128 ;存储临时字符串缓存大小,单位为MB,PHP5.3.0以前会忽略此项配置 opcache.interned_strings_buffer=8 ;缓存文件数最大限制,命中率不到100%,可以试着提高这个值 opcache.max_accelerated_files=4000 ;一定时间内检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 单位为秒 opcache.revalidate_freq=60 ;开启快速停止续发事件,依赖于Zend引擎的内存管理模块,一次释放全部请求变量的内存,而不是依次释放内存块 opcache.fast_shutdown=1 ;针对支持CLI版本PHP启动操作码缓存 一般被用来测试和调试 opcache.enable_cli=1
以上配置是根据手册里面推荐的性能配置:
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
还有很多配置选择,上面这些是主要的,可以参考官网手册:https://www.php.net/manual/zh/opcache.configuration.php
配置了之后看phpinfo可以看到信息:
opcache仅有几个函数,使用起来很方便:
$reset = opcache_reset();//所有的脚本将会重新载入并且在下次被点击的时候重新解析。 $configuration = opcache_get_configuration();//获取当前的配置 $compile_file= opcache_compile_file(__DIR__.'/a.php');//— 无需运行,即可编译并缓存 PHP 脚本 $invalidate = opcache_invalidate(__DIR__.'/test.php',true);//该函数的作用是使得指定脚本的字节码缓存失效。 如果 force 没有设置或者传入的是 FALSE,那么只有当脚本的修改时间 比对应字节码的时间更新,脚本的缓存才会失效 $get_status=opcache_get_status(true);//获取缓存的状态信息,参数为是否获取已经缓存的脚步文件信息 $is_script_cached = opcache_is_script_cached(__DIR__.'/test.php');//查询某文件是否已经被缓存到opcache了 print_r(get_defined_vars());//打印结果
结果:
[configuration] => Array ( [directives] => Array ( [opcache.enable] => 1 [opcache.enable_cli] => [opcache.use_cwd] => 1 [opcache.validate_timestamps] => 1 [opcache.validate_permission] => [opcache.dups_fix] => [opcache.revalidate_path] => [opcache.log_verbosity_level] => 1 [opcache.memory_consumption] => 134217728 [opcache.interned_strings_buffer] => 8 [opcache.max_accelerated_files] => 10000 [opcache.max_wasted_percentage] => 0.05 [opcache.consistency_checks] => 0 [opcache.force_restart_timeout] => 180 [opcache.revalidate_freq] => 2 [opcache.preferred_memory_model] => [opcache.blacklist_filename] => [opcache.max_file_size] => 0 [opcache.error_log] => [opcache.protect_memory] => [opcache.save_comments] => 1 [opcache.enable_file_override] => [opcache.optimization_level] => 2147401727 [opcache.file_cache] => [opcache.file_cache_only] => [opcache.file_cache_consistency_checks] => 1 ) [version] => Array ( [version] => 7.3.4 [opcache_product_name] => Zend OPcache ) [blacklist] => Array ( ) ) [compile_file] => 1 [invalidate] => 1 [get_status] => Array ( [opcache_enabled] => 1 [cache_full] => [restart_pending] => [restart_in_progress] => [memory_usage] => Array ( [used_memory] => 9169936 [free_memory] => 125041792 [wasted_memory] => 6000 [current_wasted_percentage] => 0.0044703483581543 ) [interned_strings_usage] => Array ( [buffer_size] => 6291008 [used_memory] => 269904 [free_memory] => 6021104 [number_of_strings] => 5831 ) [opcache_statistics] => Array ( [num_cached_scripts] => 2 [num_cached_keys] => 5 [max_cached_keys] => 16229 [hits] => 3 [start_time] => 1593172671 [last_restart_time] => 1593174871 [oom_restarts] => 0 [hash_restarts] => 0 [manual_restarts] => 23 [misses] => 5 [blacklist_misses] => 0 [blacklist_miss_ratio] => 0 [opcache_hit_rate] => 37.5 ) [scripts] => Array ( [D:\phpstudy_pro\WWW\test\a.php] => Array ( [full_path] => D:\phpstudy_pro\WWW\test\a.php [hits] => 0 [memory_consumption] => 1872 [last_used] => Fri Jun 26 20:37:01 2020 [last_used_timestamp] => 1593175021 [timestamp] => 1593173159 ) [D:\phpstudy_pro\WWW\test\test.php] => Array ( [full_path] => D:\phpstudy_pro\WWW\test\test.php [hits] => 0 [memory_consumption] => 1608 [last_used] => Fri Jun 26 20:37:01 2020 [last_used_timestamp] => 1593175021 [timestamp] => 0 ) ) ) [is_script_cached] =>