Zend OPcache 经过 opcode 缓存和优化提供更快的 PHP 执行过程。它将预编译的脚本文件存储在共享内存中供之后使用,从而避免了从磁盘读取代码并进行编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。 php
当解释器完成对脚本代码的分析后,便将它们生成能够直接运行的中间代码,也称为操做码(Operate Code,opcode)。Opcode cache 的目地是避免重复编译,减小 CPU 和内存开销。若是动态内容的性能瓶颈不在于 CPU 和内存,而在于 I/O 操做,好比数据库查询带来的磁盘 I/O 开销,那么 opcode cache 的性能提高是很是有限的。可是既然 opcode cache 能带来 CPU 和内存开销的下降,这总归是好事 —— 本着环保的态度,也应该尽可能减小消耗不是? :D mysql
现代操做码缓存器(Optimizer+,APC2.0+,其余)使用共享内存进行存储,而且能够直接从中执行文件,而不用在执行前“反序列化”代码。这将带来显着的性能加速,一般下降了总体服务器的内存消耗,并且不多有缺点。 git
Optimizer+ 于 2013年3月中旬更名为 Opcache。 github
根据 PHP wiki 上的讨论,Zend Opcache 即将整合到 php 5.5 中。做为 APC 的竞争对手,新生的 Zend Opcache 颇有可能取代 APC 的位置,虽然 OptimizerPlus 没有象 APC 那样的 user cache 功能。 sql
如今已经可使用 Zend Opcache 替代 APC 做为 PHP 优化加速工具了。目前的 Zend Opcode 兼容 PHP 5.2.*、5.3.*、5.4.* 和 PHP-5.5 开发版。不过,未来会取消对 PHP 5.2 的支持。 数据库
注意:Zend Opcache 与 eaccelerator 相冲突。要安装 Zend Opcache,可能须要先卸载 eaccelerator —— 若是你用了这个加速模块的话。 centos
Zend Opcache 的源代码托管在 github 上,目前仍是叫作 ZendOptimizerPlus。 缓存
安装步骤详见其 README 文件。 服务器
注意: ide
顺便说一句,从源码编译安装时须要用到 php-devel。README 中快速安装一节的开头就用到,
$PHP_DIR/bin/phpize
若是不清楚 phpize 的路径,能够,
whereis phpize
README 文件中也有相应的推荐优化设置。
我不喜欢从源码编译安装程序,一个是水平有限,一个就是怕麻烦。下面介绍从 EPEL 安装源安装 Zend Opcache,以 CentOS 上的操做为例,基于个人 VPS 的配置。
EPEL 社区已经提供了 Zend Opcache 的安装包,能够直接 yum 安装。固然,前提是已经配置使用了 EPEL 的安装源。若是没有,能够参考这里。
提醒一下,REMI 安装源上的 PHP 已是 5.4 版本了。鉴于有人测试说 WordPress 在 PHP 5.4 上的性能要优于在 PHP 5.3 上的性能(10% faster and lower ram consuming),顺便升级一下 PHP 也不是什么坏事。
操做步骤:
yum remove php-eaccelerator php-xcache php-apcu
没有使用则跳过。
yum update
目的是根据 remi 安装源的状态升级当前的 php 等软件到 remi 支持的最新版本。此时,能够看到系统有相似下面的输出:
Updating : php-common-5.4.14-1.el6.remi.i686 1/26 WARNING : These php-* RPM are not official Fedora / Red Hat build and overrides the official ones. Don't file bugs on Fedora Project nor Red Hat. Use dedicated forums http://forums.famillecollet.com/ warning: /etc/php.ini created as /etc/php.ini.rpmnew Updating : mysql-libs-5.5.31-1.el6.remi.i686 2/26 WARNING : This MySQL RPM is not an official Fedora / Red Hat build and it overrides the official one. Don't file bugs on Fedora Project nor Red Hat. Use dedicated forums http://forums.famillecollet.com/ warning: /etc/my.cnf created as /etc/my.cnf.rpmnew
表示咱们如今要从 Fedora / Red Hat 的版本迁移到 Remi 版本了,因此不要去 Fedora / Red Hat 寻求帮助了。呵呵,貌似出问题都是在网上找,还真是不多到官方论坛里提问。像我这样的入门级用户,也不会遇到那么深度的问题。
yum install php-pecl-zendopcache
安装时产生的 opcache 的配置文件位于默认的 /etc/php.d 目录中:
opcache-default.blacklist opcache.ini
这个配置文件采用的基本就是 README 中的推荐设置,只有几个地方须要修改。
vi /etc/php.d/opcache.ini
对照以下推荐配置修改并保存便可(可参考完整的 Zend Opcache 配置信息):
opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
service httpd restart
查询一下看看是否正确启动了:
php -v
输出结果相似于:
PHP 5.4.14 (cli) (built: Apr 11 2013 11:04:35) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.1, Copyright (c) 1999-2013, by Zend Technologies
PHP 上有很多 opcode cache 组件,如 APC、eAccelerator、XCache 等。(参见 Wikipedia 上的 PHP accelerators 列表。)看 PHP wiki 上的意思,这个新引入的 Zend Opcache 的性能应该是最好的。无论用哪一个组件,总归是用一个才好。
对于小型的服务器,彷佛这几个组件的性能差别并不太明显。个人想法是,既然用了,那就用个最好的吧。可是若是你正在使用别的 opcode cache,好比上面提到的这几个中的一个,从性能提高上讲,却是不必马上就换。
对这个站,首页生成时间:仅使用 PHP 的时候,大约 0.9s;使用 eAccelerator 大约 0.63s;使用 Zend Opcache 后大约 0.55s。测试得很是简陋,多打开几回看看 WP Super Cache 提供的页面生成时间,估计一个平均数。
登陆到系统里看了看 Apache 进程的内存占用。以前一个进程很少大一下子就能占用 40MB 以上的内存,如今基本上没有高于 40MB 的了。只是不知道是 php 5.4 的功劳呢,仍是 Zend Opcache 的功劳。
不知道您以为这个 Zend Opcache 的效果如何?若是您有兴趣,不妨留言写下您的测试结果。©