设为首页 收藏本站
查看: 1493|回复: 0

[经验分享] php Zend Opcache,xcache,eAccelerator缓存优化详解及对比

[复制链接]
累计签到:13 天
连续签到:1 天
发表于 2015-9-3 01:35:28 | 显示全部楼层 |阅读模式
  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.iyunv.com/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/
DSC0000.jpg
  #./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&Prime;   
解释: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&Prime;   
解释:打开或者关闭eaccelerator。”1&Prime;指打开,”0&Prime;指关闭。默认值为”1&Prime;。   
——————–   
eaccelerator.optimizer=”1&Prime;  (如果没有安装optimizer请设置为0关闭加速引擎,否则会出现PHP脚本错误)
  解释:打开或者关闭代码优化,开启可以加快代码的执行速度。”1&Prime;指打开,”0&Prime;指关闭。默认值为”1&Prime;。   
——————–   
eaccelerator.check_mtime=”1&Prime;   
解释:当打开此项时,eaccelerator会在每次请求时检查php文件的修改时间,看其是否被修改过,这会耗费一点时间,如果php文件被修改
过,eaccelerator会重新编译缓存该php文件。当关闭此项时,如果php文件被修改,则需要手工删除eaccelerator缓存,才能显示
被修改的php文件。”1&Prime;指打开,”0&Prime;指关闭。默认值为”1&Prime;。   
——————–   
eaccelerator.debug=”0&Prime;   
解释:打开或者关闭调试记录。当打开时,eaccelerator会将对一个缓存文件的每次请求都写进log。打开此项只对调试eaccelerator是否有BUG时有益处。”1&Prime;指打开,”0&Prime;指关闭。默认值为”0&Prime;。   
——————–   
eaccelerator.filter=”"   
解释:决定哪些PHP文件应该被缓存。可以指定一个范围(比如”*.php *.phtml”),这样被指定的文件就会被缓存。如果该范围以!开头,被指定的文件就不会被缓存。默认值为”",表示缓存所有的PHP文件。   
——————–   
eaccelerator.shm_max=”0&Prime;   
解释:一个用户使用例如eaccelerator_put之类的函数能够往共享内存中加载的最大数据。默认值为”0&Prime;,表示不限制。(单位为字节)   
——————–   
eaccelerator.shm_ttl=”0&Prime;   
解释:当没有足够的空闲共享内存去尝试缓冲一个新脚本时,将删除至少在shm_ttl秒之前没有被访问过的文件。默认值为”0&Prime;,表示不尝试从共享内存中删除任何旧的脚本。(单位为秒)   
——————–   
eaccelerator.shm_prune_period=”0&Prime;   
解释:当没有足够的空闲共享内存去尝试缓冲一个新脚本时,将删所有旧脚本,前提是这个尝试在超过shm_prune_period秒之前被执行过。默认值为”0&Prime;,表示不尝试从共享内存中删除任何旧的脚本。(单位为秒)   
——————–   
eaccelerator.shm_only=”0&Prime;   
解释:打开或者关闭在磁盘上缓存编译过的脚本。这个参数对会话数据和内容缓存没有效果。默认值为”0&Prime;,表示使用磁盘和共享内存来缓存。   
——————–   
eaccelerator.compress=”1&Prime;   
解释:打开或者关闭缓存内容压缩。”1&Prime;指打开,”0&Prime;指关闭。默认值为”1&Prime;。   
——————–   
eaccelerator.compress_level=”9&Prime;   
解释:内存压缩的级别。默认值为”9&Prime;,表示最大压缩。
  #这个是我机器的so位置   
extension=”/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/eaccelerator.so”   
#这个是设置一个缓存大小   
eaccelerator.shm_size=”64&Prime;   
#缓存目录   
eaccelerator.cache_dir=”/usr/local/webserver/eaccelerator_cache” 实际配置不建议放在WEB目录下,考虑到安全因素建议放到web目录以外
  #网站目录,把解开的eAccelerator 的源码包里的control.php 文件复制到你的WEB 服务器中的一个目录下,使其它以通过http 访问,如果不加那么看不到缓存的页面列表,但是还是可以看到内存信息
  eaccelerator.allowed_admin_path=/usr/www/
  eaccelerator.enable=”1&Prime;   
eaccelerator.optimizer=”1&Prime; (如果没有安装optimizer请设置为0关闭加速引擎,否则会出现PHP脚本错误)   
eaccelerator.check_mtime=”1&Prime;   
eaccelerator.debug=”0&Prime;   
eaccelerator.filter=”"   
eaccelerator.shm_max=”0&Prime;   
eaccelerator.shm_ttl=”0&Prime;   
eaccelerator.shm_prune_period=”0&Prime;   
eaccelerator.shm_only=”0&Prime;   
eaccelerator.compress=”1&Prime;   
eaccelerator.compress_level=”9&Prime;
  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()
DSC0001.jpg
DSC0002.jpg
  4.查看缓存文件夹
  为了直观所以截图图形界面
DSC0003.jpg
  这说明成功生成了缓存
  5.更好的监控方式
  eAccelerator控制面板的地址,安装包里有一个control.php文件,把它复制到网站的任意目录,可以用它查看和管理,这个必须指定,否则查看缓存内容的时候会出错,访问时候默认的用户名是:admin,密码:eAccelerator
DSC0004.jpg
  注意,之前的php.ini配置文件加上这个配置就会看到明细信息
  eaccelerator.allowed_admin_path=/usr/www/
DSC0005.jpg
  重启apache则会清空缓存
  文档:
  eaccelerator.shm_size=”8&Prime;     
eAccelerator 可以使用的共享内存的数量 (以MB为单位) . “0&Prime; 是指操作系统的默认值,默认值是 “0&Prime;,可根据服务器的实际情况来调整:16、32、64、128都是可以的。
  eaccelerator.cache_dir=”/usr/local/webserver/eaccelerator_cache”     
这个目录是给磁盘缓存使用,eAccelerator 在这里储存预先编译好的代码,进程数据,内容以及用户的自定义内容。同样的数据也能被储存在共享内存中 (这样可以提高访问速度)
  eaccelerator.enable=”1&Prime;     
开启或关闭 eAccelerator,”1&Prime; 为开启,”0&Prime; 为关闭。默认值为 “1&Prime;。
  eaccelerator.optimizer=”1&Prime; (如果没有安装optimizer请设置为0关闭加速引擎,否则会出现PHP脚本错误)     
启或关闭内部优化器,可以提升代码执行速度。”1&Prime; 为开启,”0&Prime; 为关闭。默认值为 “1&Prime;。
  eaccelerator.check_mtime=”1&Prime;     
打开或者关闭 PHP 的文件修改检查,”1&Prime; 是指打开,”0&Prime; 是指关闭。默认值是 “1&Prime;。
  eaccelerator.debug=”0&Prime;     
开启或关闭调试日志记录。”1&Prime; 为开启,”0&Prime; 为关闭。默认值为 “0&Prime;。会将缓存命中得记录写入日志。
  eaccelerator.filter=”"     
判断哪些 PHP 文件必须缓存。可以指定缓存和不缓存的文件类型(如 “*.php *.phtml”等)如果参数以 “!” 开头,则匹配这些参数的文件被忽略缓存。默认值为 “”,即,所有 PHP 文件都将被缓存。
  eaccelerator.shm_max=”0&Prime;     
当使用 ” eaccelerator_put() ” 函数时禁止其向共享内存中存储过大的文件。该参数指定允许存储的最大值,单位:字节 (10240, 10K, 1M)。”0&Prime; 为不限制。默认值为 “0&Prime;。
  eaccelerator.shm_ttl=”3600&Prime;     
当 eAccelerator 获取新脚本的共享内存大小失败时,它将从共享内存中删除所有在最后 “shm_ttl” 秒内没有存取的脚本缓存。默认值为”0&Prime;,为不从共享内存中删除任何缓存文件。
  eaccelerator.shm_prune_period=”3600&Prime;     
当 eAccelerator 获取新脚本的共享内存大小失败时,他将试图从共享内存中删除早于”shm_prune_period” 秒的缓存脚本。默认值为 “0&Prime;,为不从共享内存中删除任何缓存文件。
  eaccelerator.shm_only=”0&Prime;     
允许或禁止将已编译脚本缓存在磁盘上。该选项对 session 数据和内容缓存无效。默认值为 “0&Prime;,为使用磁盘和共享内存进行缓存。
  eaccelerator.compress=”1&Prime;     
允许或禁止压缩内容缓存。默认值为 “1&Prime;,为允许压缩。
  eaccelerator.compress_level=”9&Prime;     
指定内容缓存的压缩等级。默认值为 “9&Prime;,为最高等级。
  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 时的情况,右边是使用了的
DSC0006.jpg
  连续测试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的缓存插件一般有三个:APC、eAccelerator、XCache,但未来它们可能都会消失,因为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查看是否生效,显示下面的信息就说明生效了
DSC0007.jpg
  在phpinfo页面的下面可以看到的运行状态
DSC0008.jpg
  如果嫌这个不直观可以装个PHP文件查看,地址在https://gist.github.com/ck-on/4959032,把上面的代码保存为一个php文件放到你的网站目录下面打开就可以看到:
DSC0009.jpg
  命中率100%。
转载:http://my.oschina.net/angelangel/blog/338458

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-108796-1-1.html 上篇帖子: php 安装 xcache 扩展 下篇帖子: Introduction to XCache ¶
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表