php中opcache的使用详解

原创 2015年10月27日 00:27:26

简述

关于opcode缓存的概念可以参考鸟哥的文章:http://www.laruence.com/2008/06/18/221.html
目前为php提供opcode缓存的扩展有很多,比如:Zend Opcache,xcache,eAccelerator,apc等等。

为什么选择opcache呢?

  • 官方出品,这就保证了会持久更新,而其他一些扩展如apc已经很久都没有更新过了;

  • 适配php5.2、5.3、5.4,而且在php5.5版本之后自带了opcache,不需要额外安装,在非 Windows 平台使用
    zend_extension=/full/path/to/opcache.so, Windows平台使用zend_extension=C:\path\to\php_opcache.dll即可;

  • 在各种opcode缓存扩展中,Zend Opcache的优化性能最好(在网上看到的一些文章里都这样说,笔者没有亲自做过对比,故读者只是作为借鉴即可)

在windows下的安装及配置

在该地址可以找到你的开发环境对应的opcache扩展:http://windows.php.net/downloads/pecl/releases/opcache/
解压后放到dll扩展目录下,笔者的本地环境是wamp一键安装包,将dll文件放置在该地址:H:\wamp\bin\php\php5.5.12\zend_ext

将如下配置段加入到php.ini文件中:

zend_extension = "H:/wamp/bin/php/php5.5.12/zend_ext/php_opcache.dll" 
#以下配置为php文档中推荐的配置
opcache.enable=1        #是否开启opcode缓存
opcache.memory_consumption=128  #OPcache 的共享内存大小,以兆字节为单位
opcache.interned_strings_buffer=8   #用来存储临时字符串的内存大小,以兆字节为单位。 PHP 5.3.0 之前的版本会忽略此配置指令
opcache.max_accelerated_files=4000  #OPcache 哈希表中可存储的脚本文件数量上限。
opcache.revalidate_freq=60      #检查脚本时间戳是否有更新的周期,以秒为单位。 设置为 0 会导致针对每个请求, OPcache 都会检查脚本更新,这个配置在下文中会提到
opcache.fast_shutdown=1     #如果启用,则会使用快速停止续发事件。 所谓快速停止续发事件是指依赖 Zend 引擎的内存管理模块 一次释放全部请求变量的内存,而不是依次释放每一个已分配的内存块。(不太懂)
opcache.enable_cli=1    #OPcache 的共享内存大小,以兆字节为单位

详细配置信息参见php文档:http://php.net/manual/zh/opcache.configuration.php
修改完ini文件后重启服务器,打印phpinfo()信息,如果看到如下截图,就说明opcache安装成功了。
php中opcache的使用详解
上图中的Cache hits(缓存命中率)对我们来说比较具有参考价值。

测试以及相关函数的使用

  • 测试

    安装好opcache之后,我们可以先测试一下,

test2.php

$a = 'hello test';
echo $a;

打印结果是hello test。现在修改一下文件内容:

test2.php

$a = 'hello test2';
echo $a;

打印结果依旧是hello test。说明该文件已经经过了opcache缓存。一直刷新该页面,注意观察该值什么时候发生了变化。同时注意phpinfo中缓存命中率的数据是否一直在增加。再检查一下opcache.revalidate_freq的配置参数,就可以看出在opcache.revalidate_freq配置时间段内php不会检查该文件是否有更新。

  • 相关函数

如果想清空opcode缓存,可以使用opcache_reset函数,下面是一个例子:

opcache_reset();

执行代码后可以看到phpinfo中缓存命中率的数据已经清零。
php中opcache的使用详解

从前面的测试中,我们可以看出,要生成opcode缓存的话,必须有用户访问该页面才行,opcache为我们提供了一种不需要用户访问就能预先生成opcode缓存的方法opcache_compile_file,下面是一个例子:

test4.php

opcache_compile_file('test2.php');

现在我们如果检查test2.php文件是否已经存储到opcode缓存中去了呢?很简单,使用opcache_is_script_cached函数即可,下面是一个例子:

test3.php

var_dump(opcache_is_script_cached('test2.php'));
die();

执行结果为:true

前面提到的opcache_reset函数将会清空所有的opcode缓存,如果我们只想清空某个文件的缓存的话可以使用opcache_invalidate函数,下面是一个例子:

test5.php

var_dump(opcache_invalidate('test2.php', true));

再次执行test3.php,运行结果为:false
还有两个函数用于获取opcache的相关信息,opcache_get_status(获取缓存的状态信息),opcache_get_configuration(获取缓存的配置信息),下面是一个例子:

test6.php

var_dump(opcache_get_status());

var_dump(opcache_get_configuration());

执行结果:
php中opcache的使用详解
php中opcache的使用详解

关于php中opcache的使用就讲到这里,希望对各位有所帮助。

版权声明:本文为博主原创文章,转载请注明出处和作者名,尊重别人也是尊重自己 举报

相关文章推荐

PHP优化加速之Opcache使用总结

Opcache是一种通过将解析的PHP脚本预编译的字节码存放在共享内存中来避免每次加载和解析PHP脚本的开销,解析器可以直接从共享内存读取已经缓存的字节码,从而大大提高PHP的执行效率。PS: 需要区...

禁用opcache缓存

今天在yii+apache2开发的过程中,上传了代码到web服务器上,每次都要等待几十秒中之后,修改的代码才会反应过来,一查,原来是php.ini中开启了 opcahce 。下面是禁用 opcache...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

PHP调试跟踪之XDebug使用总结

Xdebug是一个开源的PHP程序调试工具,可以使用它来调试、跟踪及分析程序运行状态。当然,Xdebug需要结合PHP的编辑工具来打断点、跟踪、调试及分析,比较常用的PHP的Xdebug调试环境:Vi...

Nginx中502和504错误详解

在使用Nginx时,经常会碰到502 Bad Gateway和504 Gateway Time-out错误,下面以Nginx+PHP-FPM来分析下这两种常见错误的原因和解决方案。 1.50...
  • dc_726
  • dc_726
  • 2013-09-23 20:23
  • 24728

PHP安装、配置及拓展总结

本篇文章主要总结的是PHP的安装、配置、拓展库的添加及验证,实现平台为Unix/Linux/Mac OS X,这里也包括日后的技术文章,只将PHP语言作为服务器端脚本和命令式脚本的使用进行总结,其中不...

PHP5.5+启用OPCache

APC在PHP5.4及以下版本是性能最好的代码缓存。不过

[PHP] - 性能加速 - 开启Opcache

[PHP] - 性能加速 - 开启Opcache标签(空格分隔): PHPPHP7已经发布了, 作为PHP10年来最大的版本升级, 最大的性能升级, PHP7在多放的测试中都表现出很明显的性能提升 ...

OPcache 文件缓存刷新

PHP加载opcache扩展后,经常有文件由于OPcache缓存修改后不生效,写个脚本手动执行 每个文件一行,并用分号( ; )分割,例如: App\Li...

使用OpCache提升PHP性能

OpCache通过对opcode的缓存和优化来提升PHP执行速度。 PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的)。对于PHP 5.5以下版本的,需要使用...

php中opcache的使用详解

简述 关于opcode缓存的概念可以参考鸟哥的文章:http://www.laruence.com/2008/06/18/221.html 目前为php提供opcode缓存的扩展有很多,比如:Ze...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)