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

时间:2022-12-21 22:57:57

XCACHE

XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率 2 到5 倍, 降低服务器负载.

XCache 是一个又快又稳定的 PHP opcode 缓存器. 经过良好的测试并在大流量/高负载的生产机器上稳定运行. 经过(在 linux 上)测试并支持所有现行 PHP 分支的最新发布版本, 如 PHP_4_3 PHP_4_4 PHP_5_0 PHP_5_1 PHP_5_2 HEAD(6.x), 并支持线程安全/Windows. 与同类 opcode 缓存器相比更胜一筹, 比如能够快速跟进 PHP 版本.

XCache 工程由 mOo 领队, 他也是 Lighttpd 的开发成员之一. Lighttpd 是最快的 Web 服务器应用程序之一, 并且超越 Apache 以及许多其他 Web 服务器. XCache 努力达到类似的效果.

XCache 的INI配置详解

载入 XCache 模块

   
引用    
;; 安装成 zend extension (推荐), 路径一般是 “$extension_dir/xcache.so”    
zend_extension = /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so    
;; Windows 系统例子:    
zend_extension_ts = c:/php/extensions/php_xcache.dll    
;; 或者您也可把 XCache 安装成 extension, 注意确保您的 extension_dir 设置正确, 并    
把 xcache.so 或者 php_xcache.dll 放到该目录里面    
; extension = xcache.so    
;; 或者 Win32 系统:    
; extension = php_xcache.dll

XCache Administration

xcache.admin.user string  
验证名.    
xcache.admin.pass string    
md5 后的验证密码, 亦即 md5(您的密码), 留空则禁用管理页面.    
xcache.test string    
仅在测试一些功能的时候才启用. 如果您不知道这个功能的作用, 则您不需要知道.    
xcache.coredump_directory string    

置在 crash (SIGSEGV/SIGABRT) 时保存 core dump 文件的路径. 留空则禁止, 或者设置为类似
“/tmp/phpcore/” 的目录. 确保这个路径可以被 php 写入文件. (与 open_basedir 无关).    
xcache.admin.enable_auth string    

果你打算自己处理验证, 用这个选项禁止 HTTP 验证功能. 值得注意的是任意 vhost 用户都可以安装一个 XCache admin
页面, 如果禁止了内建 HTTP 验证, 则他们亦不需要权限即可访问管理页面. 出于安全考虑, 您应该尽量考虑保留 XCache 内建验证功能,
针对 XCache admin 页面特定地址取消网页服务器的 mod_auth 这个选项仅在 1.2.x 系列有作用, 起始版本 1.2.1

XCache Cacher

xcache.cacher boolean  
使用/不使用 opcode 缓存器. xcache.size = 0 时无效.    
xcache.size int    
0 禁止, 非 0 则启用缓存器. 请注意您系统所允许的 mmap 最大值.    
xcache.count int    
指定将 cache 切分成多少块. 参考 SplittedCache    
xcache.slots size    
只是作为 hash 槽个数的参考值, 您可以放心地缓冲超过这个个数的项目.    
xcache.ttl seconds    
设置缓冲项目的 Ttl (Time To Live) 值, 0=永不过期.    
xcache.gc_interval seconds    
检查过期项目, 回收内存空间的间隔.    
xcache.var_size int    
xcache.var_count int    
xcache.var_slots size    
xcache.var_gc_interval seconds    
同上, 不过用于数据缓冲而不是 opcode 缓冲.    
xcache.var_ttl seconds    
xcache_(get|set|inc|dec) 等的默认 ttl 值.    
xcache.var_maxttl seconds    
最大 ttl 值, 程序无法指定超过这个最大值的 ttl.    
xcache.readonly_protection boolean    
如果启用了 ReadonlyProtection, 将会略微降低性能, 但是会提高一定的安全系数. 这个选项对于 xcache.mmap_path = /dev/zero 无效.    
xcache.mmap_path string    

于 *nix, xcache.mmap_path 是 文件路径, 不是目录. 对于 Win32, xcache.mmap_path 只是匿名的
map 名, 不是实际的文件路径. 如果您要启用 ReadonlyProtection 请用类似 “/tmp/xcache” 的路径. 2 组
php 不该共用同一个路径 (/dev/zero 除外).

XCache Optimizer

xcache.optimizer boolean  
启用优化器 (目前无效).

XCache Coverager

xcache.coverager boolean  
Enable coverage data collecting for
xcache.coveragedump_directory and
xcache_coverager_start/stop/get/clean() functions (will hurt executing
performance)    
xcache.coveragedump_directory string    
Directory
to dump coverage data. Make sure it’s readable (care open_basedir) by
coverage viewer script. Requires xcache.coverager=On

eAccelerator

1、背景  
eAccelerator
是一个免费开源的PHP加速、优化、编译和动态缓存的项目,它可以通过缓存PHP代码编译后的结果来提高PHP脚本的性能,使得一向很复杂和离我们很远的

PHP脚本编译问题完全得到解决。通过使用eAccelerator,可以优化你的PHP代码执行速度,降低服务器负载,可以提高PHP应用执行速度最高
达10倍。

eAccelerator 项目诞生于2004年,当时它是作为 Turck MMCache 项目的一个分支提出并投入开发的。 Turck
MMCache 由 Dmitry Stogov 开发,是个非常优秀的PHP内存缓存加速系统,如今仍然有很大部分 eAccelerator
的代码应用到该项目中,目前该项目有很长时间没有更新了,对于最新的PHP版本支持还未推出。

2、原理  
eAccelerator
通过把经过编译后的PHP代码缓存到共享内存中,并在用户访问的时候直接调用从而起到高效的加速作用。它的效率非常高,从创建共享内存到查找编译后的代码
都在非常短的时间内完成,对于不能缓存到共享内存中的文件和代码,eAccelerator还可以把他们缓存到系统磁盘上。

eAccelerator
同样还支持PHP代码的编译和解释执行,你可以通过encoder.php脚本来对php代码进行编译达到保护代码的目的,经过编译后的代码必须运行在安

装了eAccelerator的环境下。eAccelerator编译后的代码不能被反编译,它不象其他一些编译工具那样可以进行反编译,这将使得代码更
加安全和高效。

最新的PHP5.4.8安装eAccelerator,

需要注意的是要安装高版本的,低了编译不过去。

官网:http://eaccelerator.net/

1.下载安装eAccelerator

#wget https://github.com/eaccelerator/eaccelerator/tarball/master

最新的版本是eaccelerator-42067ac.tar.gz

#tar zxvf eaccelerator-42067ac.tar.gz

需要phpize安装php扩展,如果不明白phpize可以看这个:http://blog.csdn.net/21aspnet/article/details/8193482

需要注意的是需要写php的安装路径对应的phpize下面的php-config也是

#  /usr/local/webserver/php/bin/phpize

需要记住生成的提示信息下面配置php要用到

/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-

20100525/

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

#./configure –enable-eaccelerator=shared –with-php-config=/usr/local/webserver/php/bin/php-config

# make

需要注意的是要安装高版本的,低了编译不过去。

# make install

2.配置php.ini配置文件

[eaccelerator]  
extension=”/data/webserver/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so”    
eaccelerator.shm_size=”32″    
eaccelerator.cache_dir=”/data/cache/eaccelerator”    
eaccelerator.enable=”1″    
eaccelerator.optimizer=”1″ (如果没有安装optimizer请设置为0关闭加速引擎,否则会出现PHP脚本错误)    
eaccelerator.check_mtime=”1″    
eaccelerator.debug=”0″    
eaccelerator.filter=”"    
eaccelerator.shm_max=”0″    
eaccelerator.shm_ttl=”0″    
eaccelerator.shm_prune_period=”0″    
eaccelerator.shm_only=”0″    
eaccelerator.compress=”1″    
eaccelerator.compress_level=”9″    
建立缓存目录:    
# mkdir -p /data/cache/eaccelerator    
# chmod 0777 /data/cache/eaccelerator    
重启Apache:    
# service httpd restart    
3、检查ZendOptimizer和eaccelerator是否安装成功    
创建一个phpinfo.php文件,内容如下:    
<?php    
    phpinfo();    
?>    
将该文件放置到网站目录,在浏览器中访问,如果出现以下内容则安装成功:    
This program makes use of the Zend Scripting Language Engine:    
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies    
    with eAccelerator v0.9.5, Copyright (c) 2004-2006 eAccelerator, by eAccelerator    
    with Zend Extension Manager v1.0.11, Copyright (c) 2003-2006, by Zend Technologies    
    with Zend Optimizer v3.2.2, Copyright (c) 1998-2006, by Zend Technologies    
二、eaccelerator配置信息详解(根据官方英文说明翻译)    
extension=”/data/webserver/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so”    
解释:PHP扩展eaccelerator.so的路径。    
——————–    
eaccelerator.shm_size=”32″    
解释:eaccelerator可使用的共享内存大小(单位为MB)。    
在Linux下,单个进程的最大内存使用量受/proc/sys/kernel/shmmax中设置的数字限制(单位为字节),例如CentOS 4.4的shmmax默认值为33554432字节(33554432bytes/1024/1024=32MB)。    
临时更改该值:    
# echo 字节数 > /proc/sys/kernel/shmmax    
按照以上方法更改,在每次重启系统时,该值会被自动还原。如果想永久更改,可以修改/etc/sysctl.conf文件,设置:    
kernel.shmmax = 字节数    
——————–    
eaccelerator.cache_dir=”/data/cache/eaccelerator”    
解释:缓存路径,可以使用命令mkdir -p /data/cache/eaccelerator创建该目录,然后使用命令chmod 0777 /data/cache/eaccelerator设置该目录权限为0777    
——————–    
eaccelerator.enable=”1″    
解释:打开或者关闭eaccelerator。”1″指打开,”0″指关闭。默认值为”1″。    
——————–    
eaccelerator.optimizer=”1″  (如果没有安装optimizer请设置为0关闭加速引擎,否则会出现PHP脚本错误)

解释:打开或者关闭代码优化,开启可以加快代码的执行速度。”1″指打开,”0″指关闭。默认值为”1″。  
——————–    
eaccelerator.check_mtime=”1″    
解释:当打开此项时,eaccelerator会在每次请求时检查php文件的修改时间,看其是否被修改过,这会耗费一点时间,如果php文件被修改
过,eaccelerator会重新编译缓存该php文件。当关闭此项时,如果php文件被修改,则需要手工删除eaccelerator缓存,才能显示
被修改的php文件。”1″指打开,”0″指关闭。默认值为”1″。    
——————–    
eaccelerator.debug=”0″    
解释:打开或者关闭调试记录。当打开时,eaccelerator会将对一个缓存文件的每次请求都写进log。打开此项只对调试eaccelerator是否有BUG时有益处。”1″指打开,”0″指关闭。默认值为”0″。    
——————–    
eaccelerator.filter=”"    
解释:决定哪些PHP文件应该被缓存。可以指定一个范围(比如”*.php *.phtml”),这样被指定的文件就会被缓存。如果该范围以!开头,被指定的文件就不会被缓存。默认值为”",表示缓存所有的PHP文件。    
——————–    
eaccelerator.shm_max=”0″    
解释:一个用户使用例如eaccelerator_put之类的函数能够往共享内存中加载的最大数据。默认值为”0″,表示不限制。(单位为字节)    
——————–    
eaccelerator.shm_ttl=”0″    
解释:当没有足够的空闲共享内存去尝试缓冲一个新脚本时,将删除至少在shm_ttl秒之前没有被访问过的文件。默认值为”0″,表示不尝试从共享内存中删除任何旧的脚本。(单位为秒)    
——————–    
eaccelerator.shm_prune_period=”0″    
解释:当没有足够的空闲共享内存去尝试缓冲一个新脚本时,将删所有旧脚本,前提是这个尝试在超过shm_prune_period秒之前被执行过。默认值为”0″,表示不尝试从共享内存中删除任何旧的脚本。(单位为秒)    
——————–    
eaccelerator.shm_only=”0″    
解释:打开或者关闭在磁盘上缓存编译过的脚本。这个参数对会话数据和内容缓存没有效果。默认值为”0″,表示使用磁盘和共享内存来缓存。    
——————–    
eaccelerator.compress=”1″    
解释:打开或者关闭缓存内容压缩。”1″指打开,”0″指关闭。默认值为”1″。    
——————–    
eaccelerator.compress_level=”9″    
解释:内存压缩的级别。默认值为”9″,表示最大压缩。

#这个是我机器的so位置  
extension=”/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/eaccelerator.so”    
#这个是设置一个缓存大小    
eaccelerator.shm_size=”64″    
#缓存目录    
eaccelerator.cache_dir=”/usr/local/webserver/eaccelerator_cache” 实际配置不建议放在WEB目录下,考虑到安全因素建议放到web目录以外

#网站目录,把解开的eAccelerator 的源码包里的control.php 文件复制到你的WEB 服务器中的一个目录下,使其它以通过http 访问,如果不加那么看不到缓存的页面列表,但是还是可以看到内存信息

eaccelerator.allowed_admin_path=/usr/www/

eaccelerator.enable=”1″  
eaccelerator.optimizer=”1″ (如果没有安装optimizer请设置为0关闭加速引擎,否则会出现PHP脚本错误)    
eaccelerator.check_mtime=”1″    
eaccelerator.debug=”0″    
eaccelerator.filter=”"    
eaccelerator.shm_max=”0″    
eaccelerator.shm_ttl=”0″    
eaccelerator.shm_prune_period=”0″    
eaccelerator.shm_only=”0″    
eaccelerator.compress=”1″    
eaccelerator.compress_level=”9″

eaccelerator.keys     = “disk_only”  
eaccelerator.sessions = “disk_only”    
eaccelerator.content  = “disk_only”

设置内容缓存的存放的地方,可以设置为:  
shm_and_disk 在共享缓存和硬盘(默认值)    
shm      默认存在共享内存,如果共享内存已满或大小超过 “eaccelerator.shm_max” 的值,就存到硬盘    
shm_only    只存放在共享内存    
disk_only    只存放在硬盘    
none      不缓存数据

这里为了查看效果设置为存在硬盘

增加权限

#mkdir /usr/local/webserver/eaccelerator_cache  
#chmod 777 /usr/local/webserver/eaccelerator_cache

3.测试查看phpinfo()

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

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

4.查看缓存文件夹

为了直观所以截图图形界面

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

这说明成功生成了缓存

5.更好的监控方式

eAccelerator控制面板的地址,安装包里有一个control.php文件,把它复制到网站的任意目录,可以用它查看和管理,这个必须指定,否则查看缓存内容的时候会出错,访问时候默认的用户名是:admin,密码:eAccelerator

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

注意,之前的php.ini配置文件加上这个配置就会看到明细信息

eaccelerator.allowed_admin_path=/usr/www/

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

重启apache则会清空缓存

文档:

eaccelerator.shm_size=”8″    
eAccelerator 可以使用的共享内存的数量 (以MB为单位) . “0″ 是指操作系统的默认值,默认值是 “0″,可根据服务器的实际情况来调整:16、32、64、128都是可以的。

eaccelerator.cache_dir=”/usr/local/webserver/eaccelerator_cache”    
这个目录是给磁盘缓存使用,eAccelerator 在这里储存预先编译好的代码,进程数据,内容以及用户的自定义内容。同样的数据也能被储存在共享内存中 (这样可以提高访问速度)

eaccelerator.enable=”1″    
开启或关闭 eAccelerator,”1″ 为开启,”0″ 为关闭。默认值为 “1″。

eaccelerator.optimizer=”1″ (如果没有安装optimizer请设置为0关闭加速引擎,否则会出现PHP脚本错误)    
启或关闭内部优化器,可以提升代码执行速度。”1″ 为开启,”0″ 为关闭。默认值为 “1″。

eaccelerator.check_mtime=”1″    
打开或者关闭 PHP 的文件修改检查,”1″ 是指打开,”0″ 是指关闭。默认值是 “1″。

eaccelerator.debug=”0″    
开启或关闭调试日志记录。”1″ 为开启,”0″ 为关闭。默认值为 “0″。会将缓存命中得记录写入日志。

eaccelerator.filter=”"    
判断哪些 PHP 文件必须缓存。可以指定缓存和不缓存的文件类型(如 “*.php *.phtml”等)如果参数以 “!” 开头,则匹配这些参数的文件被忽略缓存。默认值为 “”,即,所有 PHP 文件都将被缓存。

eaccelerator.shm_max=”0″    
当使用 ” eaccelerator_put() ” 函数时禁止其向共享内存中存储过大的文件。该参数指定允许存储的最大值,单位:字节 (10240, 10K, 1M)。”0″ 为不限制。默认值为 “0″。

eaccelerator.shm_ttl=”3600″    
当 eAccelerator 获取新脚本的共享内存大小失败时,它将从共享内存中删除所有在最后 “shm_ttl” 秒内没有存取的脚本缓存。默认值为”0″,为不从共享内存中删除任何缓存文件。

eaccelerator.shm_prune_period=”3600″    
当 eAccelerator 获取新脚本的共享内存大小失败时,他将试图从共享内存中删除早于”shm_prune_period” 秒的缓存脚本。默认值为 “0″,为不从共享内存中删除任何缓存文件。

eaccelerator.shm_only=”0″    
允许或禁止将已编译脚本缓存在磁盘上。该选项对 session 数据和内容缓存无效。默认值为 “0″,为使用磁盘和共享内存进行缓存。

eaccelerator.compress=”1″    
允许或禁止压缩内容缓存。默认值为 “1″,为允许压缩。

eaccelerator.compress_level=”9″    
指定内容缓存的压缩等级。默认值为 “9″,为最高等级。

eaccelerator.keys = “disk_only”    
eaccelerator.sessions = “disk_only”      
eaccelerator.content = “disk_only”      
设置内容缓存的存放的地方,可以设置为:    
shm_and_disk 在共享缓存和硬盘(默认值)    
shm      默认存在共享内存,如果共享内存已满或大小超过 “eaccelerator.shm_max” 的值,就存到硬盘    
shm_only    只存放在共享内存    
disk_only    只存放在硬盘    
none      不缓存数据

6.测试性能

快速排序代码

<?php

function quickSort($arr)

{

$len = count($arr);

if($len <= 1) {

return $arr;

}

$key = $arr[0];

$left_arr = array();

$right_arr = array();

for($i=1; $i<$len; $i++){

if($arr[$i] <= $key){

$left_arr[] = $arr[$i];

} else {

$right_arr[] = $arr[$i];

}

}

$left_arr = quickSort($left_arr);

$right_arr = quickSort($right_arr);

return array_merge($left_arr, array($key), $right_arr);

}

$arr = array(6,3,8,5,9,2,10);

echo '<pre>';

print_r(quickSort($arr));

?>

测试方法

#ab -n 1000 http://192.168.2.107/quicksort.php

连续测试几次,主要的性能指标是Requests per second

左边是没有使用eAccelerator 时的情况,右边是使用了的

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

连续测试10次,基本数据还是比较稳定的。

使用了eAccelerator 时比没使用的要好!

使用strace查看C语言级别的php源码

可以看eAccelerator缓存是怎么被读取的完成过程

扩展阅读:

eAccelerator提供如下的API接口和文件:(下述文件均在源码包的doc/php/目录下)

文件列表:

cache.php

dasm.php

encoder.php

info.php

loader.php

session.php

shared_memory.php

接口列表:

array eaccelerator_cached_scripts ()

void eaccelerator_cache_output (string $key, string $eval_code, [int $ttl = 0])

void eaccelerator_cache_page (string $key, [int $ttl = 0])

void eaccelerator_cache_result (string $key, string $code, [int $ttl = 0])

void eaccelerator_caching (boolean $flag)

void eaccelerator_clean ()

void eaccelerator_clear ()

array eaccelerator_dasm_file (mixed $filename)

mixed eaccelerator_encode (mixed $src, [mixed $prefix = ''], [string $pre_content = ''], [string $post_content = ''])

void eaccelerator_gc ()

mixed eaccelerator_get (string $key)

array eaccelerator_info ()

array eaccelerator_list_keys ()

void eaccelerator_load ()

boolean eaccelerator_lock (string $key)

void eaccelerator_optimizer (boolean $flag)

void eaccelerator_purge ()

boolean eaccelerator_put (string $key, mixed $value, [int $ttl = 0])

array eaccelerator_removed_scripts ()

boolean eaccelerator_rm (string $key)

void eaccelerator_rm_page (string $key)

boolean eaccelerator_set_session_handlers ()

boolean eaccelerator_unlock (string $key)

有关上述文档详细说明请参考官方文档

下面有部分网友翻译后的接口说明:

eaccelerator_put($key, $value, $ttl=0)    
   将 $value 以 $key 为键名存进缓存(php4下支持对像类型,看源码好像zend2里不支持了),$ttl 是这个缓存的生命周期,单位是秒,省略该参数或指定为 0 表示不限时,直到服务器重启清空为止。      
eaccelerator_get($key)      
   根据 $key 从缓存中返回相应的 eaccelerator_put() 存进去的数据,如果这项缓存已经过期或不存在那么返回值是 NULL      
eaccelerator_rm($key)      
   根据 $key 移除缓存      
eaccelerator_gc()      
   移除清理所有已过期的 key      
eaccelerator_lock($key)      
   为 $key 加上锁定操作,以保证多进程多线程操作时数据的同步。需要调用 eaccelerator_unlock($key) 来释放这个锁或等待程序请求结束时自动释放这个锁。      
   例如:      
   <?php      
     eaccelerator_lock(“count”);      
     eaccelerator_put(“count”,eaccelerator_get(“count”)+1));      
   ?>      
eaccelerator_unlock($key)      
   根据 $key 释放锁      
eaccelerator_cache_output($key, $eval_code, $ttl=0)      
   将 $eval_code 代码的输出缓存 $ttl 秒,($ttl参数同 eacclerator_put)      
   例如:      
   <?php eaccelerator_cache_output(‘test’, ‘echo time(); phpinfo();’, 30); ?>      
eaccelerator_cache_result($key, $eval_code, $ttl=0)      
   将 $eval_code 代码的执行结果缓存 $ttl 秒,($ttl参数同 eacclerator_put),类似 cache_output      
   例如:      
   <?php eaccelerator_cache_result(‘test’, ‘ time() . “Hello”;’, 30); ?>      
eaccelerator_cache_page($key, $ttl=0)      
   将当前整页缓存 $ttl 秒。      
   例如:      
   <?php      
     eaccelerator_cache_page($_SERVER['PHP_SELF'].’?GET=’.serialize($_GET),30);      
     echo time();      
     phpinfo();      
   ?>      
eaccelerator_rm_page($key)      
   删除由  eaccelerator_cache_page() 执行的缓存,参数也是 $key

2、PHP代码中使用eAccelerator加速

另外,在PHPCMS里面已经集成了对eAccelerator的支持,下面是一段来自PHPCMS里面的代码

class cache
{
    function __construct()
    {
    }     function cache()
    {
$this->__construct();
    }     function get($name)
    {
        return eaccelerator_get($name);
    }     function set($name, $value, $ttl = 0)
    {
        eaccelerator_lock($name);
        return eaccelerator_put($name, $value, $ttl);
    }     function rm($name)
    {
        return eaccelerator_rm($name);
    }     function clear()
    {
        return eaccelerator_gc();
    }
}

新一代 PHP 加速插件 Zend Opcache

大家知道目前PHP的缓存插件一般有三个:APCeAcceleratorXCache,但未来它们可能都会消失,因为PHP 5.5已经集成Zend Opcache,功能和前三者相似但又有少许不同,缓存速度据说比它们更快(注意:只是据说,我没测试过)。

这几个PHP加速插件的主要原理都相同,就是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速 度,降低服务器负载,它们的效率是显而易见的,像drupal这种庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而 知,在安装APC等加速器后打开页面的速度明显加快。

Zend Opcache 已经集成在了PHP 5.5里面,编译安装PHP5.5的时候加上–enable-opcache就行了。但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,未来会取消对5.2的支持,下面是我在PHP 5.4下的安装方法:

依次执行下面的命令

wget http://pecl.php.net/get/zendopcache-7.0.2.tgz

tar xzf zendopcache-7.0.2.tgz

cd zendopcache-7.0.2

/usr/local/php/bin/phpize (此处根据实际php安装路径)

./configure --with-php-config=/usr/local/php/bin/php-config

make

make install

如果显示Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 表示安装完成,下面要修改php的配置文件让它生效

接着呢,配置下php.ini,在最后加上:

[opcache]

zend_extension=opcache.so

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

opcache.enable=1

一般来说,按照以往的经验,如果加在ZendGuardLoader之前会稳定多了。

128意思是给它分配128M内存,然后重启apache,用phpinfo查看是否生效,显示下面的信息就说明生效了

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

在phpinfo页面的下面可以看到的运行状态

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

如果嫌这个不直观可以装个PHP文件查看,地址在https://gist.github.com/ck-on/4959032,把上面的代码保存为一个php文件放到你的网站目录下面打开就可以看到:

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

命中率100%。
转载:http://my.oschina.net/angelangel/blog/338458

php Zend Opcache,xcache,eAccelerator缓存优化详解及对比的更多相关文章

  1. php Zend Opcache&comma;xcache&comma;eAccelerator缓存优化详解&lpar;具体根据个人需要选择其一即可,功能都一样切勿重复选择&rpar;

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

  2. 浏览器 HTTP 协议缓存机制详解

    最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control.为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag, ...

  3. lucene、lucene&period;NET详细使用与优化详解

    lucene.lucene.NET详细使用与优化详解 2010-02-01 13:51:11 分类: Linux 1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应 ...

  4. Nginx配置项优化详解【转】

    (1)nginx运行工作进程个数,一般设置cpu的核心或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor / ...

  5. Nginx服务优化详解

    Nginx服务优化详解 1.隐藏Nginx版本信息 编辑主配置文件nginx.conf,在http标签中添加代码 server_tokens off;来隐藏软件版本号. 2.更改Nginx服务启动的默 ...

  6. MySQL-5&period;5&period;32 配置文件优化详解

    目录 MySQL-5.5.32 配置文件优化详解 一.配置文件说明 2.my-medium.cnf 3.my-large.cnf 4.my-huge.cnf 5.my-innodb-heavy-4G. ...

  7. SqlServer数据库性能优化详解

    数据库性能优化详解 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小,使每个查询的响应时间最短并最大限度地提高整个数据库服务器的吞吐量.为达到此目的,需要了解应用程序的需求和数据 ...

  8. 浏览器 HTTP 协议缓存机制详解--网络缓存决策机制流程图

    1.缓存的分类 2.浏览器缓存机制详解 2.1 HTML Meta标签控制缓存 2.2 HTTP头信息控制缓存 2.2.1 浏览器请求流程 2.2.2 几个重要概念解释 3.用户行为与缓存 4.Ref ...

  9. MySQL之SQL优化详解(二)

    目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

随机推荐

  1. RN中的onChangeText

    在RN学习中,按照一本书中案例书写TextInput框, 书中给了两种写法 写法1: <TextInput style={styles.pswInputStyle} placeholder='请 ...

  2. php框架学习的步骤

    一,选择一个合适的php框架 在国内,使用zf,ci和tp框架的人比较多,新手可以从中选一个去学习,新手不建议一开始就去学习zf,功力还不够深,学习zf会让你更迷茫. 二,选定一个php框架之后,如何 ...

  3. WebService学习笔记系列(三)

    网上有一些提供webservice服务的网站,我们要怎么调用呢? 今天来看个如何调用手机归属地查询服务.这个网站上提供了许多webservice服务,其中包括手机归属地查询服务,我们今天就用wsimp ...

  4. 【转】android MSM8974 上DeviceTree简介----不错

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784213 简介 主要功能是不在代码中硬编码设备信息,而是用专门的文件来描述.整个系统的 ...

  5. flex基本概念

    基本使用 任何一个容器都可以指定为flex布局 .box { display: flex; } 行内元素也可以使用flex .box { display: inline-flex; } Webkit内 ...

  6. mysql修改当前用户的密码

    ALTER USER USER() IDENTIFIED BY '123456';https://majing.io/posts/10000005531181

  7. Python笔记(九):字符串操作

    (一)    字符串 单引号.双引号.三重引号都可以作为字符串的开始和结束,三重引号可以直接输入多行字符串.三重引号可能一般是用来写多行注释. (二)    r和\ r使字符串成为原始字符串,忽略所有 ...

  8. Jenkins 源代码编译

    最近一直想写一个关于 Jenkins 管理的 InelliJ 插件,但是尝试很多次总是在登录认证上面失败,各种办法都不起作用,而且官方的文档含糊不清,就动起了从源代码编译在开发环境中进行调试. 废话少 ...

  9. 手机网页的头部meta的相关配置~~

    今天使用sublime写手机端网页的时候,发现木有meta的自动生成手机网页的快捷键·~ 然后就去网上巴拉,准备存储一份~~哈哈 一.天猫 <title>天猫触屏版</title&g ...

  10. iOS学习笔记30-系统服务&lpar;三&rpar;蓝牙

    一.蓝牙 随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步步成熟,现在的大部分移动设备都配备有蓝牙4.0,相比之前的蓝牙技术耗电量大大减少. 在iOS中进行 ...