文档章节

php中的脚本加速扩展opcache (1)

lg2045
 lg2045
发布于 2015/04/27 16:33
字数 1348
阅读 518
收藏 1
点赞 0
评论 0


今儿在azure里装php5.5.4得瑟,发现原先php5.4php5.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了,只是要启用的话必须配置。

一、PHPopcache的安装、加速效果与配置介绍

经过测试,php5.4php5.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版本的php要安装opcache也很简单,下载zend opcachehttp://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运行、起到缓存的效果。


zendopcache与xcache效率对比图

如何配置启用opcache呢?

1.     zend_extension = “__Dir__opcached.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 ;检测php文件变动频率 单位秒 多少秒检测下php文件是否变动

8.     opcache.fast_shutdown=1

9.     opcache.enable=1

10.  opcache.enable_cli=1

11.  #配置中的__Dir__请更换成opcached.so文件的存放位置

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

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

zend opcache

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

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

二、启用opcache后的一些情况

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

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

那么在变动php文件后如何才能快速降低opcache缓存带来的这种问题呢?最简单的方法就是更新代码后重启下php-fpmnginx fast-cgi模式)或apacheapache-handler模式)。

 


本文转载自:http://blog.jjonline.cn/linux/135.html

共有 人打赏支持
lg2045
粉丝 13
博文 145
码字总数 14044
作品 0
朝阳
程序员
基于Opcache发布php项目

基于Opcache发布php项目 Jqlblue's Blog2017-12-147 阅读 发布PHP php的 已经release好多年了,现在基本都是php的标配。最近看到了php创始人 的一篇 talk ,于是有了使用php的opcache发布代码...

Jqlblue's Blog
2017/12/14
0
0
PHP服务缓存加速优化实战

PHP服务缓存加速优化实战 (1) 操作码介绍及缓存原理: 当客户端请求一个PHP程序的时候,服务器的 PHP 引擎会解析该 PHP 程序,并将其编译为特定的操作码(Operate Code)文件。 该文件是执行P...

棋帅小七
2017/09/20
0
0
opcache php性能提升用法小结

简介 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode cache的目地是避免重复编译,减少CPU和内存开销,OPcache 通过将...

2688
2016/07/28
35
0
使用 Zend Opcache 加速 PHP (2)

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

lg2045
2015/04/27
0
0
PHP7中用opcache.file_cache导出脚本opcode实现源代码保护

停止php-fpm(apache同理): sudo /png/php/7.0.0/pngfpm stop 创建opcode缓存目录: mkdir -m 777 /png/php/opcachefilecache 在php.ini中配置: zendextension=/png/php/7.0.0/lib/php/extens......

eechen
2015/12/07
6.3K
26
php安装完成没有安装phpize解决方法以及安装eaccelerator扩展

偶然闲逛,突然发现我们以前的php机器竟然都没有安装php加速扩展,好吧!真是很无奈啊~~至于ubuntu下的几个系统,使用的是opcache这个加速器,这里不多说,详见以前文章http://addam.blog.5...

残夜寻茶香
2014/09/11
0
0
PHP历史之3:秣兵历马的PHP7-王者归来

提起PHP7,就不得不提到源自FB的HHVM,据说安装了这种优化器,可以高效的PHP运行环境提升PHP性能9倍以上 当然PHP7已经超过了这种性能。 伴随着PHP 7的发布,这几天关于PHP 7性能和兼容性成了大...

ccpit2b2c
06/26
0
0
PHP7 opcache缓存清理问题

PHP7 opcache缓存清理问题 背景 OPcache通过opcode的缓存和优化,提供更快的PHP执行过程。 业务在php7环境运营时,为了提升请求的性能,在PHP7环境中配置OPcache扩展。 业务在更新代码后,访...

双鱼座小龙
2017/07/23
0
0
PHP7优化提高性能的几个Tips

PHP7已经发布了, 作为PHP10年来最大的版本升级, 最大的性能升级, PHP7在多放的测试中都表现出很明显的性能提升, 然而, 为了让它能发挥出最大的性能, 我还是有几件事想提醒下. 1. Opcache 记得...

English0523
2015/12/29
0
0
linux php Zend OpCache 扩展,提高性能

PHP 5.5 以后内建了 OpCache ,我们启用即可 OpCache 的加速原理是把编译后的 bytecode 存储在内存里面, 避免重复编译 PHP 所造成的资源浪费. 虽然内建了, 但是默认没有启用: 修改 php.ini 文...

郭三斤
2016/08/19
8
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue基础知识练习

一、Hello World <div id="itany">{{msg}} <!-- 两对大括号{{}}称为模板,用来进行数据的绑定显示在页面中 --> </div><script src="js/vue.js"></script><script>var vm=new Vue({......

一个yuanbeth
9分钟前
0
0
spring @Transactional注解参数详解

原文:事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需...

binhu
12分钟前
0
0
CORS 跨域实践

本文首发于个人微信公众号《andyqian》,期待你的关注~ 前言 系统通常都是由单体应用逐渐演化而来,演化成为前后端分离的分布式应用。在享受分布式系统带来的诸多好处之时,随之而来的也有不...

andyqian
19分钟前
7
0
开源 java CMS - FreeCMS2.8 会员管理

项目地址:http://www.freeteam.cn/ 会员组管理 会员管理 会员管理 从左侧管理菜单点击会员管理进入。 添加会员 在会员列表下方点击“添加”按钮。 填写相关属性后点击“保存”按钮即可。 编...

freeteam
20分钟前
0
0
bboss升级至 v5.0.6.8版本,改善对Elasticsearch SQL 的支持

v5.0.6.8功能改进如下: (1)持久层支持支持Elasticsearch SQL,使用参考文档:玩转Elasticsearch SQL功能 (2)解决持久层/elasticsearch模板变量解析多层级不起作用问题 (3)完善国际化功能 (4...

linux-tao
21分钟前
0
0
扫码二维码跳转到某个网站

添加maven依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.goog......

gaomq
28分钟前
0
0
Windows平台下搭建Git服务器的图文教程

Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在windows下的开发要把自己...

MKChan
34分钟前
0
0
告警系统主脚本&告警系统配置文件&告警系统监控项目

20.20 告警系统主脚本 准备工作 定义监控系统的各个目录,然后再去定义主脚本,因为是分布式的,所以需要每一台机器都需要定义,事先创建好各个脚本和各个目录,随后脚本直接拷贝过去即可,然...

影夜Linux
34分钟前
0
0
谈谈神秘的ES6——(一)初识ECMAScript

谈谈神秘的ES6——(一)初识ECMAScript 在《零基础入门JavaScript》我们就说过,ECMAScript是JavaScript的核心,是JavaScript语法和语义的解释器,同时也是一个标准。而ECMAScript标准其实也...

JandenMa
今天
1
0
第16章 Tomcat配置

16.1 Tomcat介绍 ####Tomcat介绍 LNMP架构针对的开发语言是PHP语言,php 是一门开发web程序非常流行的语言,早些年流行的是asp,在Windows平台上运行的一种编程语言,但安全性差,就网站开发...

Linux学习笔记
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部