Zend 缓存
一、
Zend Optimizer 和 Zend Guard Loader 作用和区别
两者的功能一样。
Zend Optimizer 在PHP5.3以前的版本使用,解密和代码优化,提高PHP应用程序的执行速度,显著降低服务器的CPU负载。
Zend Guard Loader 在php版本大于php5.3之后,解密和代码优化,提高PHP应用程序的执行速度,显著降低服务器的CPU负载。
在PHP版本大于php5.3开始Zend Optimizer 正式被Zend Guard Loader取代了。
二、
使用Zend Opcache 加速PHP
Zend Opcache通过opcode缓存和优化提供更快的PHP执行过程,它将预编译的脚本文件存储在
共享内存中供以后使用,从而避免了从磁盘读取代码并进行编译的时间消耗。
同时,它还应用了一些代码优化模式,使得代码执行速度更快。
1、什么是opcode缓存?
当解释器完成对PHP脚本代码的分析之后,便将它们生成直接运行的中间代码,也被称为操作码
(Operate Code, opcode)。opcode cache的目的是避免重复编译,减少CPU和内存开销。
如果动态内容的性能瓶颈不在于CPU和内存,而在于I/O操作,比如数据库查询带来的磁盘I/O开销,
那么opcode cache 的性能提升是非常有限的。但是既然opcode cache 能带来CPU和内存开销的降低,这总归是好事----
本着环保的态度,也应该尽量减少消耗不是?
现在操作码缓存器(Optimizer+, APC2.0+,其他)使用共享内存进行存储,并且可以直接从
中执行文件,而不用在执行前“反序列化”代码。这将带来显著的性能加速,通过降低了整体服务器
的内存消耗,而且很少有缺点。
2、Optimizer+ 与APC的优缺点对比
Optimizer+与2013年3月中旬改名为opcache。
根据PHP wiki 上的讨论,真的 Opcache 即将整合到php5.5中。作为APC的竞争对手,
新生的Zend Opcache 很有可能取代APC的位置,虽然OptimizerPlus没有像APC那样的user cache功能。
Optimizer+ 相对APC的优点
1、性能。根据测试,Zend Optimizer+始终由于APC。随着代码差异,每秒钟处理的请求数高5%~20%。
Google doc上记录的测试结果,WordPress2.1.1,性能提高约8%。理论上来说,对于WordPress3.5.1,性能应该
也能得到大约5~10%的提升吧。对于运行WordPress的服务器而言,使用Optimizer+可以显著
降低CPU使用率和提高页面加载速度。
2、支持新的PHP版本。Zend和PHP社区都会帮助Optimizer+能够支持最新版本的PHP。
3、可靠性。Optimizer+拥有可选的损坏检测能力,可以防止因数据损坏二导致的服务器奔溃。
4、更好的兼容性。PHP社区打算让Optimizer+与社区支持的所有的PHP版本相兼容。
APC相对Optimizer+的优势
1、APC有数据缓存API,而Optimizer+没有。
2、APC能够回收旧的无效的脚本占用的内存。APC有内存管理器,可以将那些不再使用的
脚本关联的内存进行回收。而Optimizer+不同,它将这样的内存标记为“脏的”,
但并不会回收它们。一旦“脏的”内存占用配置阀值的百分比达到一定值,Optimizer+就将自己重新启动。
这种行为在稳定性上既有优势也有劣势。
3、使用Zend opcode
现在已经可以使用Zend Opcache 替代APC优化加速工具了。目前的Zend opcode
兼容PHP5.2、5.3.、5.4.*和php5.5开发版。不过,将来会取消对PHP5.2的支持。
注意:Zend5Opcache与eacceleralor相冲突。要安装Zend Opcache,可能需要先卸载
eaccelerator------如果你用了这个加速模块的话。
4、体会
PHP上有不少opcode cache组件,如APC、eaccelerator、xcache、Zend Opcache等。
Zend Opcache的性能应该是最好的,。不管用哪个组件,总归是用一个才好。
PHP加速器之Opcache配置详解
一、什么是opcode?
当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。
opcode cache的目的是避免重复编译,减少CPU和内存开销。
二、为什么要使用opcode缓存?
这得从PHP代码的生命周期说起,请求PHP脚本时,会经历五个步骤,如下图所示:
Zend引擎必须从文件系统读取文件、扫描其词和表达式、解析文件、创建要执行的计算机代码(称为opcode),
最后执行opcode。每次请求PHP脚本都会执行一遍以上步骤,如果PHP源代码没有变化,那么opcode也不会变化,
显然没有必要每次都重新生成opcode,结合在web中无所不在的缓存机制,我们把opcode缓存下来,
以后直接访问缓存的opcode岂不是更快,启用opcode缓存之后的流程图如下所示:
三、PHP opcode原理
opcode是一种PHP脚本变异后的中间语言,就像Java的bytecode,或者.net的MSI,举例,比如
你写了如下的PHP代码:
<?php
echo "Hello world";
$a = 1 + 1;
echo $a;
?>
PHP执行这段代码会经过如下4个步骤(确切的说,应该是PHP的语言引擎Zend)
1)Scanning(Lexing),将PHP代码转化为语言片段(Tokens)。
2)Parsing,将Tokens转化为简单而有意义的表达式。
3)Compilation,将表达式编译成opcode。
4)Execution,顺序执行opcodes,每次一条,从而实现PHP脚本的功能。
四、PHP Opcache介绍
Optimizer+(Optimizer+于2013年3月中旬改名为Opcache),Opcache 通过将PHP脚本预编译的字节码
存储到共享内存中来提高PHP的性能,存储预编译字节码的好处就是省去了每次加载和解析PHP脚本的开销。
PHP5.5.0及后续版本中已经绑定了Opcache扩展。对于php5.2、PHP5.3、PHP5.4版本可以使用>>PECL扩展中的
Opcache库。
PHP5.5.0及后续版本中已经绑定了Opcache扩展。对于php5
Opcache只能便以为共享扩展。如果你使用--disable-all参数禁用了默认扩展的构建,那么
必须使用--enable-Opcache选项来开启Opcache。编译之后,就可以使用Zend_extension指令来
将Opcache扩展加载到PHP中。
最后说一下使用Opcache加速PHP时应该注意的坑:
Opcache依靠的是PHP文件的modify time作为文件被修改的检测条件,基于这个会引发两个问题。
第一个问题是做版本回滚时,由于版本回滚后的文件修改时间比现有Opcache缓存的文件时间要往前一些,
所以可能会导致Opcache不会清楚缓存,需要手动reload。
第二个问题是做版本发布时,一般都是sync方式,可能会出现文件发布一半时被Opcache缓存,用户访问导致程序报错,这个
主要是因为文件内容缓存了一半,但是文件的时间戳不会改变,所以就算Opcache检测也不会去读取新的文件了,
需要手动reload。
针对这两个问题,不光reload可以解决,同样调用Opcache的接口也可以清楚Opcache缓存。
你可以使用Opcache_reset()或者使用Opcache_invalidate()函数来手动重置Opcache。
Opcache_reset():该函数将重置真个字节码缓存,在调用Opcache_reset()之后,所有的脚本将会重新载入
并且在下次被点击的时候重新解析。
opcache_invalidate():该函数的作用是使得指定脚本的字节码缓存失效。如果force没有设置或者传入
false,那么只有当前脚本的修改时间比对应字节码的时间更新,脚本的缓存才会失效。
但是不推荐使用,个人再生产环境中进行代码发布后调用Opcache_reset()清空缓存
(册数确实可以清空缓存),出现过奇葩问题(访问量打的应用),后来就果断放弃了,使用了reload的方式。
reload方式就是重启php-fpm
service php-fpm reload
Zend 缓存的更多相关文章
- LAMP环境部署总结
linux+apche+mysql+php 此次用到的工具有:/etc/init.d/iptables , selinux, useradd, yum,chkconfig,sshd,visudo,cr ...
- php Zend Opcache,xcache,eAccelerator缓存优化详解(具体根据个人需要选择其一即可,功能都一样切勿重复选择)
载入 XCache 模块 引用 ;; 安装成 zend extension (推荐), 路径一般是 "$extension_dir/xcache.so" zend_extensio ...
- 编译安装 Zend Opcache 缓存Opcache,加速 PHP
Optimizer+ 是 Zend 开发的闭源但可以免费使用的 PHP 优化加速组件,是第一个也是最快的 opcode 缓存工具.现在,Zend 科技公司将 Optimizer+ 在 PHP Lice ...
- php Zend Opcache,xcache,eAccelerator缓存优化详解及对比
XCACHE XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接 ...
- PHP使用Zend Opcache之优化加速和缓存清理总结
简介 字节码缓存不是php的新特性,有很多独立性的扩展可以实现缓存,比如PHP Cache(APC),eAccelerator,ionCube和XCache等等.但是到目前为止,这些独立的扩展并没有集 ...
- PHP 缓存插件之 Zend Opcache ( 取代 APC )
简介: Zend Opcache .APC 这都是 PHP 代码加速器,将 PHP 源代码的编译结果缓存起来,再次调用时对比时间标记,如果没有改变则使用缓存数据,免去再次解析代码的开销. APC 止步 ...
- PHP5.4开启zend opcache缓存
PHP5.5整合了zend opcache,但是5.4以下的需要自己安装. 介绍一下开启opcache方法,环境为wamp(php5.4.16) 下载dll文件 把php_opcache.dll放进p ...
- php在5.5.0默认提供了Zend OPcache
eaccelerator无法兼容php5.5.0,好在php在5.5.0默认提供了Zend OPcache,所以一直习惯eaccelerator的朋友如果要升级到php5.5.0的话,可能要暂时和ea ...
- PHP服务缓存优化之ZendOpcache、xcache、eAccelerator
PHP服务缓存优化原理 Nginx 根据扩展名或者过滤规则将PHP程序请求传递给解析PHP的FCGI,也就是php-fpm进程 缓存操作码(opcode) Opcode,PHP编译后的中间文件,缓存给 ...
随机推荐
- c 链表之 快慢指针 查找循环节点
参考:http://blog.csdn.net/wenqian1991/article/details/17452715 上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上 ...
- 【论文笔记】使用SPSS 进行 T Test (T检验)
从具有t值来看,你是在进行T检验.T检验是平均值的比较方法. T检验分为三种方法: 1. 单一样本t检验(One-sample t test),是用来比较一组数据的平均值和一个数值有无差异.例如,你选 ...
- LRN和Batch Norm
LRN LRN全称为Local Response Normalization,局部相应归一化层. message LRNParameter { optional uint32 local_size = ...
- Go_14:GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
- Halcon算子学习
* dev前缀的算子表示开发编译器相关的函数 dev_update_window ('off')//halcon编辑器图形输出界面参数是否都更新,off表示手动,on表示全部更新 dev_close_ ...
- CentOS 配置集群机器之间SSH免密码登录
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远 ...
- C艹目录
c++ 学习路线 c++学习路线 c++ 学习目录 c++ 常用数据类型,命名规则, 不常有数据类型 C++复合类型(数组) C艹复合类型(字符串) C++复合类型(结构体) C++ 结构体和枚举 ...
- Mysql系列八:Mycat和Sharding-jdbc的区别、Mycat分片join、Mycat分页中的坑、Mycat注解、Catlet使用
一.Mycat和Sharding-jdbc的区别 1)mycat是一个中间件的第三方应用,sharding-jdbc是一个jar包 2)使用mycat时不需要改代码,而使用sharding-jdbc时 ...
- 安装psycopg2时出错:Error: pg_config executable not found.
红帽系: 安装postgresql-devel Debian系: 安装libpq-dev
- Rest风格理解
之前一直不理解restful风格,今天终于理解了些(20170527) 正常我们在浏览器的地址栏中输入的地址很多都是发起的,发起的都是get请求 通过ajax可以设置put请求,F12查看浏览器请求头 ...