简介

字节码缓存不是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. JAVA获取系统信息以及系统时间

    在做测试的时候,经常需要获取系统信息,并且用获取到的系统时间给生成的报告取名字. 以下代码实在TestNG展示的,没有Test NG的话需要些一个main方法. import java.net.Ine ...

  2. 【POJ2778】DNA Sequence 【AC自动机,dp,矩阵快速幂】

    题意 题目给出m(m<=10)个仅仅由A,T,C,G组成的单词(单词长度不超过10),然后给出一个整数n(n<=2000000000),问你用这四个字母组成一个长度为n的长文本,有多少种组 ...

  3. HDU-1260.Tickets(简单线性DP)

    本题大意:排队排票,每个人只能自己单独购买或者和后面的人一起购买,给出k个人单独购买和合买所花费的时间,让你计算出k个人总共花费的时间,然后再稍作处理就可得到答案,具体格式看题意. 本题思路:简单dp ...

  4. 配置MQTT服务器

    第一步:下载一个Xshell 链接:https://pan.baidu.com/s/16oDa5aPw3G6RIQSwaV8vqw 提取码:zsb4 打开Xshell 前往MQTT服务器软件下载地址: ...

  5. vue js库的条件渲染

    条件渲染 通过条件指令可以控制元素的创建(显示)或者销毁(隐藏),常用的条件指令如下: v-if v-if可以控制元素的创建或者销毁 <h1 v-if="ok">Yes ...

  6. 【开发工具】secureCRT的使用

    总结自己平时使用secureCRT中遇到的问题 1.安装 2.secureCRT设置标签显示远程主机ip地址

  7. [leetcode]366. Find Leaves of Binary Tree捡树叶

    Given a binary tree, collect a tree's nodes as if you were doing this: Collect and remove all leaves ...

  8. [快速幂][NOIP2012]转圈游戏

    转圈游戏 题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, ...

  9. ad_imh

    1. stc15    ad_1.7  9600 1t #include < #include <absacc.h> #include <stdio.h> #includ ...

  10. drf5 版本和认证组件

    开发项目是有多个版本的 随着项目的更新,版本就越来越多.不可能新的版本出了,以前旧的版本就不进行维护了 那我们就需要对版本进行控制,这个DRF框架也给我们提供了一些封装好的版本控制方法 版本控制组件 ...