简介

字节码缓存不是php的新特性,有很多独立性的扩展可以实现缓存,比如PHP Cache(APC),eAccelerator,ionCube和XCache等等。但是到目前为止,这些独立的扩展并没有集成到php核心当中。所有在php5.5.0之后,php内置了字节码缓存功能,叫做Zend Opcache。

zend Opcache前身是Zend Optimizer +,在03年改名Opcache,通过opcode缓存和优化提供更快的PHP执行过程。他会将预编译后的php文件存储在共享内存中以供以后的使用,避免从磁盘读取文件在进行解释的重复过程,减少时间和内存的消耗。在php5.5中及之后的版本中自带了zend opcache模块扩展,但是需要使用时需要我们开启和配置。在php5.2- 5.4版本我们也可以使用Opcache,但是需要我们自行安装。

什么是操作码缓存

那么什么是字节码缓存呢?php是一门解释型的语言,php解释器执行php脚本时会解析php脚本代码,将php脚本代码编译成一系列可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。然后执行这些操作码.

每次请求php文件都是这样,所以会消耗很多资源,如果每次HTTP请求PHP都必须解析,编译和运行脚本,消耗的资源将会更多.

Opcode cache 的目地是避免重复编译,减少 CPU 和内存开销。需要注意的是如果动态内容的性能瓶颈不在于 CPU 和内存,而在于 I/O 操作,比如数据库查询带来的磁盘 I/O 开销,那么 opcode cache 的性能提升是非常有限的.

现代操作码缓存器(Optimizer+,APC2.0+,其他)使用共享内存进行存储,并且可以直接从中执行文件,而不用在执行前“反序列化”代码。这将带来显着的性能加速,通常降低了整体服务器的内存消耗,而且很少有缺点.

安装(php5.5.0以上跳过)

在PHP 5.5.0及之后版本中,PHP已经将Opcache功能以拓展形式内嵌在发布版本中了,默认未开启Opcache加速,需要我们手动开启。对于之前的老版本,可以将Opcache作为PECL拓展库进行安装和配置.

window下的安装

1. 下载扩展:https://windows.php.net/downloads/pecl/releases/opcache/

2. 将php_opcache.dll放进php/ext目录下

3. 修改php.ini下[php]配置(注意路径要修改成你自己的):

[php]
engine = On
extension = php_opcache.dll
zend_extension = "c:/xxx/php/ext/php_opcache.dll"

4. 添加php.ini下的[opcache]配置:

[opcache]
opcache.memory_consumption=
opcache.interned_strings_buffer=
opcache.max_accelerated_files=
opcache.revalidate_freq=
opcache.fast_shutdown=
opcache.enable_cli=

5. 重启apache服务,检查opcache是否开启成功

linux下的安装

源码安装

wget http://pecl.php.net/get/zendopcache-7.0.5.tgz
tar zxvf zendopcache-7.0..tgz
cd zendopcache-7.0.
/path/to/php/bin/phpize
./configure --with-php-config=/path/to/php/bin/php-config
make && make install

在php.ini下的[php]添加如下配置:

zend_extension=php_opcache.so

在php.ini的[opcache]下添加:

opcache.memory_consumption=
opcache.interned_strings_buffer=
opcache.max_accelerated_files=
opcache.revalidate_freq=
opcache.fast_shutdown=
opcache.enable_cli=

pecl 版本安装

yum install php-pecl-zendopcache

安装时产生的 opcache 的配置文件位于默认的 /etc/php.d 目录中:

opcache-default.blacklist
opcache.ini

修改该配置:

vi /etc/php.d/opcache.ini  

对照修改:

opcache.memory_consumption=
opcache.interned_strings_buffer=
opcache.max_accelerated_files=
opcache.revalidate_freq=
opcache.fast_shutdown=
opcache.enable_cli=

不需要修改php.ini,重启apache服务.

常用配置

;开关打开
opcache.enable= ;开启CLI
opcache.enable_cli= ;可用内存, 酌情而定, 单位为:Mb
opcache.memory_consumption= ;Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)
opcache.interned_strings_buffer= ;对多缓存文件限制, 命中率不到 % 的话, 可以试着提高这个值
opcache.max_accelerated_files= ;Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 , 定位为秒
opcache.revalidate_freq= ;打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高
opcache.fast_shutdown= ;检查脚本时间戳是否有更新的周期,以秒为单位。设置为 会导致针对每个请求, OPcache 都会检查脚本更新。
opcache.revalidate_freq= ;如果启用,那么 OPcache 会每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新。
;如果禁用此选项,你必须使用 opcache_reset() 或者 opcache_invalidate() 函数来手动重置 OPcache,也可以 通过重启 Web 服务器来使文件系统更改生效。
opcache.validate_timestamps=

注意:如果设置opcache的opcache.validate_timestamps的指令设成0,那么zend opcache就察觉不到PHP脚本的变化,我们必须手动清空zend opcache缓存的字节码,让他发现php脚本的变动.这个设置适合在生产环境中设置成0,在开发环境下最好还是设置成1.

我们可以这样配置,启用自动重新验证缓存功能:

opcache.validate_timestamps=
opcache.revalidate_freq=

更多的配置指令可以看这里:http://php.net/manual/zh/opcache.configuration.php

常用函数

zend opcache使用很简单,因为它启动后会自动运行.zend opcache会自动在内存中缓存预先编译好的php字节码,如果缓存了某个文件的字节码,就执行对应的字节码.常见的关于zend 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(); #获取缓存的配置信息

以上

PHP使用Zend Opcache之优化加速和缓存清理总结的更多相关文章

  1. php在5.5.0默认提供了Zend OPcache

    eaccelerator无法兼容php5.5.0,好在php在5.5.0默认提供了Zend OPcache,所以一直习惯eaccelerator的朋友如果要升级到php5.5.0的话,可能要暂时和ea ...

  2. 编译安装 Zend Opcache 缓存Opcache,加速 PHP

    Optimizer+ 是 Zend 开发的闭源但可以免费使用的 PHP 优化加速组件,是第一个也是最快的 opcode 缓存工具.现在,Zend 科技公司将 Optimizer+ 在 PHP Lice ...

  3. 新一代 PHP 加速插件 Zend Opcache

    参考:http://www.laogui.com/Zend-Opcache 大家知道目前PHP的缓存插件一般有三个:APC.eAccelerator.XCache,但未来它们可能都会消失,因为PHP ...

  4. php Zend Opcache,xcache,eAccelerator缓存优化详解及对比

    XCACHE XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接 ...

  5. PHP优化加速之Opcache使用总结

    PHP优化加速之Opcache使用总结: Opcache是一种通过将解析的PHP脚本预编译的字节码存放在共享内存中来避免每次加载和解析PHP脚本的开销,解析器可以直接从共享内存读取已经缓存的字节码,从 ...

  6. 新一代 PHP 加速插件 Zend Opcache <转>

    注: 由于原链接已不存在, 所以我把图片重新整理了一下, 以便看起来更加直观 笔者注: 1>  PHP 性能提升之 PHP NG  =>  php next generation wiki ...

  7. PHP 5.5以后加速插件:Zend Opcache

    大家知道目前PHP的缓存插件一般有三个: APC. eAccelerator. XCache,但未来它们可能都会消失,因为PHP 5.5已经集成 Zend Opcache,功能和前三者相似但又有少许不 ...

  8. php-5.3 zend opcache 的设置

    故障现象,修改了代码上传到生产服务器之后,需要等待60秒才生效. 细查了一下,是opcache引起的,默认是60秒.于是我给关了,之前是ea加速,现在新版本的php好像用这个opcache了:; 2s ...

  9. PHP安装使用Zend Opcache扩展

    简介 Zend OPCache 的前身是Zend Optimizer + (Zend O+),于 2013年3月中旬改名为 Opcache.其通过 opcode 缓存和优化提供更快的 PHP 执行过程 ...

随机推荐

  1. day40 mysql数据类型

    复习 1.环境的搭建 2.启动服务 3.库,表,字段的基本操作 create show drop alter desc insert into select from update set delet ...

  2. Es6(Symbol,set,map,filter)

    首先再讲这几个新东西之前,先说一个Es6中新出的扩展运算符(...) 1.展开运算符,就是把东西展开,可以用在array和object上 比如: let a=[,] let b=[,...a,]//[ ...

  3. Android 滑块验证

    先上图看看实现效果 1.在 app 的 build.gradle 添加依赖 implementation 'com.luozm.captcha:captcha:1.1.2' 2.将 Captcha 添 ...

  4. E. Segment Sum(数位dp)

    题意:求一个区间内满足所有数位不同数字个数小于K的数字总和.比如:k=2   1,2,3所有数位的不同数字的个数为1满足,但是123数位上有三个不同的数字,即123不满足. 我们可以使用一个二进制的数 ...

  5. Python爬虫项目--爬取链家热门城市新房

    本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途) 环境 win8, python 3.7, pycharm 正文 1. 目标网站分析 通过分析, 找出相关url, 确 ...

  6. ABP框架初始化数据(自定义)

    找到目录:AbpFramework.EntityFramework>Migrations>SeedData,这目录下创建类:DefaultDataCreator.cs using Syst ...

  7. $.fn.extend() 问:我来这个世上到底是干嘛的?

    好好好 乖  本宝宝来告诉你  你来是干嘛的啊~ 话不多说 直接上码 当然如下代码是在jquery环境下运行的 HTML JS 完事~~~ 当你点击div元素的时候  你会发现弹出来“我被单击了”这句 ...

  8. 深入浅出WPF文摘

    第一部分 深入浅出XMAL 第一章 XMAL概览 第二章 从零起步认识XMAL 第三章 系统学习XMAL语法 第四章 X名称空间详解 第五章 控件与布局 GUI:图形化用户界面 逻辑树: 可视树: : ...

  9. Memcache cpu占用过高

    分析应该是memcache的内存大小还是默认配置,已经满足不了当前的大数据量的需要了,大量的新缓存需要进入,同时大量的旧缓存又需要被淘汰出来,一进一出导致CPU占用过多.进入注册表,找到:HKEY_L ...

  10. 微信js sdk的使用初步理解

    第一步引入js文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js 备注:支持使用 AMD/C ...