今儿在azure里装php5.5.4,发现原先php5.4、php5.3中的zend guard laoder以及php5.2中的Zend Optimizer均不能再用,一直很喜欢用的eaccelerator也悲剧了,编译的时候直接提示错误。

没办法,翻看php5.5.4的安装目录,发现php的安装目录下的扩展库目录有个opcached.so;咦,这个文件是搞毛线的?看名字带cached,难道是个缓存系统?google了下,果不其然,这个是php5.5默认提供的php脚本缓存扩展,编译php5.5时加上参数--enable-opcache就可以编译opcache了,只是要启用的话必须配置。

一、PHP中opcache的安装、加速效果与配置介绍

经过测试,php5.4、php5.3乃至php5.2也是可以使用opcache模块的,参考网络上的测试文章(http://www.cnblogs.com/xiaocen/p/3709850.html)发现:zend opcache(一般就直接简称为opcache了)的加速效率高于xcache,自然也就高于一年多不维护的eaccelerator了。另外,我的测试发现在php5.4上加载了eaccelerator加速扩展后,PHP代码中使用复杂调用preg_replace_callback函数的代码段后会引起严重的内存溢出(memory leak);而preg_replace函数在php5.5已经不再建议使用,而是改用preg_replace_callback代替,从这个层面来说,弃用eaccelerator是一个明智的选择。

低于PHP5.5版本(5.5及其以上版本只需要在编译php的时候加上 --enable-opcache参数即可完成如下编译过程,最后配置启用即可)的php要安装opcache也很简单,下载zend opcache(http://pecl.php.net/package/ZendOpcache),比如下载zendopcache-7.0.3.tgz,那么编译安装就很简单了,代码如下:

  1. tar zxvf zendopcache-7.0.3.tgz
  2. cd zendopcache-7.0.3
  3. phpize
  4. #若环境变量未加入phpize的路径
  5. #则执行phpize命令时需要加上路径 加环境变量具体请参考 http://blog.jjonline.cn/linux/165.html
  6. #如你的php安装在 /usr/local/php下,那么此处应该输入
  7. #/usr/local/php/bin/phpize
  8. ./configure
  9. #同理,php安装目录下的bin目录以及sbin目录没有加入环境变量的话就需要加上参数
  10. #--with-php-config=/usr/local/php/bin/php-config #路径依据具体路径
  11. make && make install
  12. #make install 后会提示编译出的opcache.so文件的位置,在php.ini加上相关配置段即可

参考网络上的关于opcache的介绍:新一代PHP加速器,由Zend公司研发,其实现原理与Xcache类似,都是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,但性能却比Xcache更加优越,详见下方测试结果图。其机理简单点说就是将php脚本在虚拟机(暂且称php最终的机器码执行引擎为虚拟机吧)中的机器码或相应的服务器能够直接运行的代码给缓存起来,等到用户下次请求该脚本时就略过了php脚本代码转换为机器码的过程,从而达到加速php运行、起到缓存的效果。

如何配置启用opcache呢?

  1. zend_extension = "opcache.so"
  2. opcache.force_restart_timeout=3600
  3. opcache.memory_consumption=1024
  4. opcache.optimization_level=1
  5. opcache.interned_strings_buffer=8
  6. opcache.max_accelerated_files=4096
  7. opcache.revalidate_freq=60
  8. opcache.fast_shutdown=1
  9. opcache.enable=1
  10. opcache.enable_cli=1
  11. #配置中的__Dir__请更换成opcached.so文件的存放位置 一般在php文件目录的下的lib/extension下的目录中寻找

opcache的缓存代码块是可以使用内存的,具体依据配置参数而定;不再多介绍。

opcached.so被加载后,所有脚本执行时通过phpinfo就可以看到高速缓存的命中率,如下图中的Cache hits是12,而Cache misses为1

那么这个高速缓存如何被清理呢?依然通过配置文件配置,具体项目就是opcache.force_restart_timeout,通过指定该时间,在多少时间内容该缓存失效。

看到本文过来的关键词,有人在问如何关闭opcache,其实很简单,配置文件中将相关引入opcahe扩展的配置项注释掉即可(php配置文件中的注释可以使用英文分号,即在相关opcache的配置项行首位置加入英文分号,然后保存,重启apache或php-fpm即可)。

二、启用opcache后的一些情况

典型的就是由于opcache的缓存加速机制导致的代码变更后无法立即看到效果。php代码被转换成可立即执行的“机器码”后会有一定的缓存时间后才会去检查原始的PHP文件是否变动过,具体视配置项opcache.revalidate_freq设置的秒数情况而定;这样就会导致某些情况下明明更新了PHP文件中的代码,但执行后却看不到改变后的效果,这就是因为opcache检查php文件变动的间隔时间尚未结束所导致。

这个问题并不是bug,而要视具体生产环境来设定opcache.revalidate_freq值,倘若php代码很少变动,建议该值设置的大一些,可减少opcahce由于检查php文件变动而带来的额外开销,比如7200

那么在变动php文件后如何才能快速降低opcache缓存带来的这种问题呢?最简单的方法就是更新代码后重启下php-fpm(nginx fast-cgi模式)或apache(apache-handler模式)。当然还可以自己书写一个php脚本,调用opcache_reset()函数重置所有opcache缓存字节码,或者使用opcache_invalidate(PHPfileDir,true)重置指定php文件的缓存字节码。

转载于:https://www.cnblogs.com/youlechang123/p/4850602.html

php中的脚本加速扩展opcache相关推荐

  1. php opcache文件还原,php7使用opcache把编译后的php文件存储为文件,实现php源码保护和脚本加速...

    工作原理: 备注: opcache.file_cache缓存为本地文件仅php7以后支持.php5未支持该配置,仅可用户脚本加速. 一.安装opcache. windows扩展下载地址 https:/ ...

  2. shell脚本中的花括号扩展

    shell脚本中的花括号扩展 在shell脚本中可以在花括号中使用一组以逗号分隔的字符串或者字符串序列来进行字符串扩展,最终输出的结果为以空格分隔的字符串(整数也可) [root@mao_aliyun ...

  3. opcache php 原理_php性能加速之opcache

    什么是opcache OPcache 是一个通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能的PHP扩展. 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销 ...

  4. 在.NET中使用脚本引擎

    在应用程序中使用脚本引擎可以大大增强程序的灵活性和可扩展性,类似MS Office和 VS.NET的宏功能.微软.NET框架中Microsoft.vsa.dll中定义了脚本引擎的框架,而Microso ...

  5. Mac OS X 中的脚本语言应用

    http://www.applesupport.com.cn/newshow.asp?id=2442&cid=7 如你所见,Mac OS X 是一套广受程序员喜爱的操作系统,他们之所以如此喜欢 ...

  6. SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话

    SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话 如果您具有想要转换为扩展事件会话的现有 SQL 跟踪脚本,则可以使用本主题中的过程创建等 ...

  7. 在HTML网页中嵌入脚本的方式

    javascript脚本可以出现在html页面的任何地方.需要注意的是javascript在框架页中出现必须在<frameset>标签之前,否则不能运行. 在html页面中嵌入脚本的方式主 ...

  8. phpstorm docker php,使用phpstorm对docker中的脚本进行debug的方法

    在对运行在容器中的环境进行debug,可以通过网页和脚本俩种方式进行debug, 这里介绍下对容器中的脚本进行debug. xdebug的原理了解. xdebug是php的扩展,会搜集php执行的信息 ...

  9. chrome使用脚本修改组策略_允许Chrome安装第三方网站的脚本以及扩展的方法

    涵盖 Windows XP/7 .Mac OS X .Linux 的 Chrome 第三方应用安装策略说明. 听说众多 Chrome 粉丝为 Google 禁止安装第三方应用的问题感到相当烦恼.那么我 ...

最新文章

  1. 微信小程序动态设置 tabBar
  2. 除了腾讯阿里,中国最牛的风投机构,其实是合肥市政府!
  3. 消息队列服务器安装失败,开发环境下的RocketMQ完整安装步骤、错误分析以及示例...
  4. MongoDB C++ gridfs worked example
  5. python自学攻略-你是如何自学 Python 的?
  6. 97.PC 的串口是同步还是异步
  7. CentOS7修改网卡名称为eth格式
  8. 研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存...
  9. Ybtoj-排列计数【矩阵乘法,分块幂】
  10. 由于找不到openni2_Kinect开发教程八:OpenNI2显示深度、彩色及融合图像
  11. 通达信板块监控指标_通达信洞察强势板块指标公式
  12. 不存在的泳池 DFS
  13. python获取交易软件数据_几行Python代码,轻松获取美股阿里巴巴的交易数据
  14. DFS 下沙小面的(2)
  15. linux系统密码自动丢失,Linux系统密码丢失后的5种解决方法
  16. 《集异璧》作者侯世达:王维、杨绛与机器翻译的本质
  17. 自己搭建网站选用服务器的方法
  18. 花音机器人_【扑杀花音攻略组】超弩风机器人攻略(复刻x2)
  19. 软件测试肖sir__006xmind思维导图实战__微信发红包
  20. UCEs(超保守元件)常见问题,系统发育和进化研究新方法(即用型脊椎动物(辐鳍鱼类,鲈形目,骨鳔类) 无脊椎动物(蛛形纲,蜘蛛目,鞘翅目,双翅目,半翅目,膜翅目,鳞翅目)UCE探针,其他可定制)

热门文章

  1. 表面粗糙度的基本评定参数是_表面粗糙度100个常见问题
  2. 悟空问答 模板 html,悟空问答上首页技巧每小时2500个阅读快速为自己吸粉.pdf
  3. cant connect local mysql to_连接Mysql提示Can't connect to local MySQL server through socket的解决方法...
  4. Element Form表单布局(一行多列)
  5. 【前端后端运维】Web开发人员学习路线,汇总整理
  6. 【ICPC 2021网络赛2】The 2021 ICPC Asia Regionals Online Contest (II)签到题5题
  7. NYOJ1 - A+B Problem
  8. linux正则表达式_Linux 中几个正则表达式的用法
  9. UVa-679 Dropping Balls(二叉树的编号)
  10. Dekker互斥算法解析