一、
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 缓存的更多相关文章

  1. LAMP环境部署总结

    linux+apche+mysql+php 此次用到的工具有:/etc/init.d/iptables , selinux, useradd, yum,chkconfig,sshd,visudo,cr ...

  2. php Zend Opcache,xcache,eAccelerator缓存优化详解(具体根据个人需要选择其一即可,功能都一样切勿重复选择)

    载入 XCache 模块 引用 ;; 安装成 zend extension (推荐), 路径一般是 "$extension_dir/xcache.so" zend_extensio ...

  3. 编译安装 Zend Opcache 缓存Opcache,加速 PHP

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

  4. php Zend Opcache,xcache,eAccelerator缓存优化详解及对比

    XCACHE XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接 ...

  5. PHP使用Zend Opcache之优化加速和缓存清理总结

    简介 字节码缓存不是php的新特性,有很多独立性的扩展可以实现缓存,比如PHP Cache(APC),eAccelerator,ionCube和XCache等等.但是到目前为止,这些独立的扩展并没有集 ...

  6. PHP 缓存插件之 Zend Opcache ( 取代 APC )

    简介: Zend Opcache .APC 这都是 PHP 代码加速器,将 PHP 源代码的编译结果缓存起来,再次调用时对比时间标记,如果没有改变则使用缓存数据,免去再次解析代码的开销. APC 止步 ...

  7. PHP5.4开启zend opcache缓存

    PHP5.5整合了zend opcache,但是5.4以下的需要自己安装. 介绍一下开启opcache方法,环境为wamp(php5.4.16) 下载dll文件 把php_opcache.dll放进p ...

  8. php在5.5.0默认提供了Zend OPcache

    eaccelerator无法兼容php5.5.0,好在php在5.5.0默认提供了Zend OPcache,所以一直习惯eaccelerator的朋友如果要升级到php5.5.0的话,可能要暂时和ea ...

  9. PHP服务缓存优化之ZendOpcache、xcache、eAccelerator

    PHP服务缓存优化原理 Nginx 根据扩展名或者过滤规则将PHP程序请求传递给解析PHP的FCGI,也就是php-fpm进程 缓存操作码(opcode) Opcode,PHP编译后的中间文件,缓存给 ...

随机推荐

  1. Cortex-A15架构解析:它为什么这么强(转)

    今年的新手机趋势无异是全面向四核靠拢,不过同样是四核,在实际的性能上其实是千差万别.例如针对入门级主流市场的四核手机普遍采用的都是Cortex-A7以及 Cortex-A9 级别的CPU内核,这类内核 ...

  2. 译:6.RabbitMQ Java Client 之 Remote procedure call (RPC,远程过程调用)

    在  译:2. RabbitMQ 之Work Queues (工作队列)  我们学习了如何使用工作队列在多个工作人员之间分配耗时的任务. 但是如果我们需要在远程计算机上运行一个函数并等待结果呢?嗯,这 ...

  3. Socket网络编程--聊天程序(3)

    上一小节,已经讲到可以每个人多说话,而且还没有限制,简单的来说,我们已经完成了聊天的功能了,那么接下来我们要实现什么功能呢?一个聊天程序至少应该支持一对多的通讯吧,接下来就实现多个客户端往服务器发送数 ...

  4. 【Spark 深入学习 01】 Spark是什么鬼?

    经过一段时间的学习和测试,是时候给spark的学习经历做一个总结了,对于spark的了解相对晚了写.春节期间(预计是无大事),本博准备推出20篇左右spark系列原创文章(先把牛吹出去再说) ,尽量将 ...

  5. headfirst python 01~02

    列表 列表就像是数组 在python 创建一个列表时, 解释器会在内存中创建一个类似数组的数据结构来存储数据, 数据项自下而上(形成一个堆栈), 类似于其他编程语言中的数组. 列表中常用方法: cas ...

  6. 《FPGA全程进阶---实战演练》第七章 让按键恢复平静

    1基础理论部分 A:“怎么按键按下去之后,结果不正常?”,B:“按键你消抖了吗?”A:“消什么抖,还要消抖?”,  B:“先检测按键变化,然后消抖过滤波动信号,最后输出稳定信号”,A:“我好像漏掉了什 ...

  7. 【转】WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等 本文主要内容: CheckBox复选框的自定义样式,有两种不同的风格实现: RadioB ...

  8. Android异步处理系列文章四篇之四 AsyncTask的实现原理

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ...

  9. H5网页适配 iPhoneX,就是这么简单(转)

    iPhoneX 取消了物理按键,改成底部小黑条,这一改动导致网页出现了比较尴尬的屏幕适配问题.对于网页而言,顶部(刘海部位)的适配问题浏览器已经做了处理,所以我们只需要关注底部与小黑条的适配问题即可( ...

  10. [原]Jenkins(十四)---jenkins示例:admin管理所有项目,新建用户只能看部分项目

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horiz ...