一、
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. 自动化CodeReview - ASP.NET Core依赖注入

    自动化CodeReview系列目录 自动化CodeReview - ASP.NET Core依赖注入 自动化CodeReview - ASP.NET Core请求参数验证 我个人比较懒,能自动做的事绝 ...

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

    上一节已经完成了对用户的身份验证了,既然有了验证,那么接下来就能对不同的客户端进行区分了,所以这一节讲实现私聊功能.就是通过服务器对客户端的数据进行转发到特定的用户上, 实现私聊功能的聊天程序 实现的 ...

  3. 视频压缩和H264

    一.视频压缩 1.1 为什么需要压缩视频? 假设一个2小时未压缩的高清视频,1920×1080p的电影,我们来计算一下他的存储容量.先介绍一下帧率(frame rate或者是 FPS)概念,也就是每秒 ...

  4. 【Tomcat】Tomcat 系统架构与设计模式,第 1 部分: 工作原理

    这个分为两个部分的系列文章将研究 Apache Tomcat 的系统架构以及其运用的很多经典设计模式.本文是第 1 部分,将主要从 Tomcat 如何分发请求.如何处理多用户同时请求,还有它的多级容器 ...

  5. 关于uframe源码的一些解读

    游戏管理. GameManager单例:绑定在不同的gameobject上,还是会每次都实例化一个GameManager但是可以为每一个GameManager赋值一个已经存在的单例---------- ...

  6. win7(64bit)+python3.5+pyinstaller3.2安装和测试

    最近因为做项目需要,需要在win7中安装pyinstaller用于将.py文件生成脱离python平台的可执行程序*.exe文件. 安装步骤 第一步:安装python3.5 [下载python3.5的 ...

  7. AI金融知识自学偏量化方向-了解不同类型的机器学习2

    有监督学习 vs 无监督学习 迭代和评估 偏差方差权衡 结合有监督学习和无监督学习(半监督学习)

  8. React Native - FlexBox弹性盒模型

    FlexBox布局 1. 什么是FlexBox布局?   弹性盒模型(The Flexible Box Module),又叫FlexBox,意为"弹性布局",旨在通过弹性的方式来对 ...

  9. halcon模板匹配

    在机器视觉应用中,经常需要对图像进行仿射变换.1.在基于参考的视觉检测中,由于待检图像与参考图像或多或少都会存在几何变化(平移.旋转.缩放等),所以在做比较之前一般都要对待检图像进行仿射变换以对齐图像 ...

  10. docker开源仓库Harbor部署笔记

    Harbor介绍Harbor是Vmvare团队开发的开源企业级registry仓库,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务.项目地址:ht ...