php 加速、提高并发opcache
opcache是php官方的一款加速php脚本扩展,免费使用但不开源
php脚本编译后生成的机器码,叫做opcode,如果代码不改变则每次执行时生成的opcode应该是一样的,如果使用这个opcode而不需要重新编译是否更快呢?答案是显然的,这就是opcache的原理
安装opcache扩展后,一般配置文件如下:
[Zend Opcache]
zend_extension=/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/opcache.so
opcache.enable = 1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=1000000
opcache.revalidate_freq=3
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.jit_buffer_size=128m
opcache.jit=1205
max_accelerated_files 指最多能缓存100万个文件
memory_consumption 最大缓存内存512mb
revalidate_freq 是指3秒自动刷新一次缓存,如果每次都刷新则设置为0,又或者永不刷新,则设置一个额外的值:opcache.validate_timestamps=0,当validate_timestamps为1时才会每隔一段时间刷新一次缓存,这个值设置3秒可用兼容开发和生成环境都足够使用了
在php里操作opcache?
opcache_compile_file($php_file); #预生成opcode缓存
opcache_is_script_cached($php_file) #查看是否生成opcode缓存
opcache_invalidate($php_file, true) #清除单个缓存
opcache_reset(); #清空缓存
opcache_get_status(); #获取缓存的状态信息
opcache_get_configuration(); #获取缓存的配置信息
一般情况下,我们可以先判断opcache是否加载了
var_dump(extension_loaded("Zend Opcache")); //判断opcache扩展
或者直接判断特定函数
function_exists("opcache_reset")
清空指定文件,或者更保险一点清空所有缓存
if(function_exists("opcache_reset")){
if(opcache_get_configuration()['directives']['opcache.enable']){
opcache_reset();
}
}
另外值得一提的是,根据opcache原理,第一次读取,肯定不是缓存,所有新增文件无论何时新增第一次肯定能正常读取的,如果修改文件则要清空缓存否则容易异常。
根据这个原理,每次新增脚本,是不需要刷新的,修改大量文件则直接reset整个缓存比较保险。
文章作者: 朱丰华
文章链接: https://smart.52dixiaowo.com/blog/post-490.html
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。