Press "Enter" to skip to content

一个关于Zend O+的小分享

这个是我上周末在"阿里PHP技术沙龙"临时分享的一个主题的PPT, 主要是介绍一下Zend Optimizer Plus(简称O+).
O+是由Zend公司开发的一个PHP性能提升工具, 在PHP5.5开始, 已经随着PHP的源代码一起发布了, 并且也改名为:Opcache.
不同于APC, O+除了是Opcodes Cache以外, 还做了很多的Opcodes优化, 这个PPT就是主要列举了一下主要的优化们.
也不同于eacc, O+做的优化更多一些.
这个特性, 就使得O+要比APC快不少, 从Benchmark来看(Zend/bench.php), O+能节省5%的CPU IR, 能快7%以上.
另外就是, 随着Opcache进入PHP源代码树, APC我们也就不在做更新了, 主要的精力都迁移到了O+的进一步开发上.
所以, 建议大家都切换O+吧(支持5.2 到最新的5.5). 基本上只需要改一个配置, 你就能得到性能提升, 何乐而不为呢? 是吧.
一个Opcache的推荐配置:

zend_extension=opcache.so
opcache.enable_cli=1
opcache.memory_consumption=128      //共享内存大小, 这个根据你们的需求可调
opcache.interned_strings_buffer=8   //interned string的内存大小, 也可调
opcache.max_accelerated_files=4000  //最大缓存的文件数目
opcache.revalidate_freq=60          //60s检查一次文件更新
opcache.fast_shutdown=1             //打开快速关闭, 打开这个在PHP Request Shutdown的时候
                                    //   会收内存的速度会提高
opcache.save_comments=0             //不保存文件/函数的注释

对于5.5以前的PHP, 可以在这里下载到最新版的O+, ZendOpcache

42 Comments

  1. Tarsus Temizlik Şirketleri, Ev Temizliğinde Profesyonel Hizmet
    Yoğun iş temposu ve günlük yaşamın koşuşturması nedeniyle ev temizliği, birçok insan için zor ve yorucu bir iş haline gelebiliyor. Tarsus gibi büyük şehirlerde ise bu sorun daha da büyüyor. Ancak, Tarsus’ta bulunan pek çok temizlik şirketi sayesinde, ev temizliği artık zor bir iş olmaktan çıkıyor.
    Bu yazıda, Tarsus’taki temizlik şirketlerini, hizmetlerini ve avantajlarını inceleyeceğiz. Tarsus Temizlik Şirketleri

  2. mapquest driving directions
    mapquest driving directions October 19, 2020

    I am glad to see this brilliant post, all the details are very helpful and useful for us, keep up to good work.

  3. […] 官方下载:http://pecl.php.net/package/ZendOpcache 3、一个关于Zend O+的小分享:http://www.laruence.com/2013/11/11/2928.html 4、OCP -Opcache Control […]

  4. changyanlong
    changyanlong June 6, 2018

    不好意思请忽略楼下。。我回复错了博客

  5. changyanlong
    changyanlong June 6, 2018

    也可以这样:
    class sample extends ArrayIterator {
    private $_items = array(1,2);
    public function __construct() {
    ;//void
    }
    public function rewind() { reset($this->_items); }
    public function current() { return current($this->_items); }
    public function key() { return key($this->_items); }
    public function next() {
    //echo “go next\r\n”;
    return next($this->_items);
    }
    public function valid() { return ( $this->current() !== false ); }
    public function append($val) {
    echo “append ele:{$val}\r\n”;
    return array_push($this->_items, $val);
    }
    }
    $sa = new sample();
    foreach($sa as $key => $val){
    echo “$key=>$val\r\n”;
    }
    $sa->append(“aaaa”);
    foreach($sa as $key => $val){
    echo “$key=>$val\r\n”;
    }

  6. alert(1)
    alert(1) August 19, 2015

    alert(1)

  7. luyees
    luyees March 4, 2015

    鸟哥,能帮忙加一个友情链接吗?请回复哈。

  8. funbox
    funbox November 6, 2014

    与ZendOptimizer貌似不能共存
    一些代码用旧版zend guard加密了
    这回悲剧了

  9. 陈佳
    陈佳 October 30, 2014

    正在使用,效果很好,非常感谢。

  10. simapple
    simapple August 27, 2014

    opcache.interned_strings_buffer 这一项的配置很重要啊,我在使用的时候,这一项设置为4基本上没有空闲buffer,命中在98%,一单微调这个值,命中就急剧下降,在IIS下大多数时间表现正常,偶尔出现500错误,能自行恢复,原因尚不明确,期待opcache 越来越nb

  11. Google
    Google August 7, 2014

    Highly descriptive post, I enjoyed that a lot. Will there be a part 2?
    Feel free to surf to my page Google

  12. php
    php July 25, 2014

    由于某些PHP缓存数据需要适时更新,OPCACHE如果能增加手动更新指定PHP文件的编译缓存,那就更完美了。

  13. Anonymous
    Anonymous March 30, 2014

    用了opcache后想用local cache怎么办?opcache不能像apc那样支持local cache.

  14. fengwei
    fengwei March 19, 2014

    我在阿里云上装了zend_opcache(7.0.3)以及HHVM(2.5.0)做对比测试。
    因为Yaf是php扩展方式,所以我用的一个其他的小框架做了一系列测试。测试情况是HHVM非常让我失望,最好情况下也和O+差不多。
    不知道是否是我的HHVM配置有问题,或者阿里云有其他限制(这个需要有物理机来测试了)
    如果其他人有做过类似情况能否说下测试结果呢?
    测试环境用的阿里云低配。

  15. wild
    wild March 13, 2014

    opcache存在一个问题,在php-fpm启用chroot情况下,不同站点的相同名称的php文件,由于chroot下,路径也一致,导致缓存数据冲突,会把不同站点的相同名称的php当成同一个文件缓存起来。不知是算php-fpm问题,还是算opcache的问题。上次提问不是很清楚。

  16. phpcleps
    phpcleps March 7, 2014

    ZendOpcode性能确实不错!
    目前我们测试,它不能与ZendGuardLoader共同。。。
    请问有解决方案吗?

  17. dyllen
    dyllen January 15, 2014

    这个扩展是不是直接开启就会生效,代码不需要做任何变化?

  18. Lane
    Lane January 10, 2014

    学习了~~~~

  19. 雪候鸟
    雪候鸟 January 6, 2014

    @hwanginsitein 相当于( if ($c( =4 || $b=4) ) )

  20. hwanginsitein
    hwanginsitein January 6, 2014

    $c = 3;
    $b = 6;
    if ($c=4 || $b=4){
    $c++;
    $b++;
    }
    echo $c.$b;
    输出啥?
    为啥 是 17

  21. 2013年最有价值博文TOP10
    2013年最有价值博文TOP10 December 31, 2013

    […] Zend Opcache PHP 5.4 PHP 5.5下的安装 – 个人认为这是PHP 5.5开始的一个最大飞跃,相关参考:一个关于Zend O+的小分享 […]

  22. zzq
    zzq December 19, 2013

    鸟哥一以后的ppt能不能给个网盘的 翻墙好恼火啊

  23. 热豆腐
    热豆腐 December 11, 2013

    请问interned string在这里怎么理解?

  24. phpcnc
    phpcnc December 9, 2013

    Hello,博主,我搭建了个php社区,希望php能有个类似ruby,node的那种社区,现在社区刚刚上线,博主能帮忙介绍下吗?如果博主有兴趣加入那就更好了!地址为:http://phpcnc.org

  25. Star
    Star December 9, 2013

    应该不错,大家有测试过么? 都用哪些测试工具?
    apache 的ab 还是其他工具?

  26. bbtc
    bbtc November 26, 2013

    是cache的一种么?看起来像。有测试报告否?

  27. Bags
    Bags November 26, 2013

    是cache的一种么?看起来像

  28. tom916
    tom916 November 15, 2013

    Opcode Caching Up and Running
    Optimization Enabled
    Startup OK
    Shared memory model mmap
    Cache hits 177990747
    Cache misses 2563443
    Used memory 536868960
    Free memory 0
    Wasted memory 1952
    Cached scripts 9483
    Cached keys 14605
    Max keys 16229
    OOM restarts 0
    Hash keys restarts 0
    我再使用opcache的时候有个问题不能解决,就是opcache缓存的文件没法自动清除
    php.ini如下
    opcache.memory_consumption=512
    opcache.enable_cli=1
    opcache.revalidate_freq=60
    opcache.enable_file_override=1
    opcache.max_accelerated_files=16229
    opcache的状态如下,分配的500M内存已经用满了,
    我们网站是频繁上线的网站,而且每次发布全新的代码(版本是用不同的文件夹控制),代码量很大
    发现在内存耗尽后,之前缓存的scripts一直不能回收,导致新代码上线后Cache misses很高,cpu load 变得很高
    php 5.3.26
    Opcode Caching Up and Running
    Optimization Enabled
    Startup OK
    Shared memory model mmap
    Cache hits 177990747
    Cache misses 2563443
    Used memory 536868960
    Free memory 0
    Wasted memory 1952
    Cached scripts 9483
    Cached keys 14605
    Max keys 16229
    OOM restarts 0
    Hash keys restarts 0

  29. Anonymous
    Anonymous November 15, 2013

    128 是M 还是KB 这是个问题,

  30. tiger
    tiger November 14, 2013

    PHP Startup: Invalid library (maybe not a PHP library) ‘opcache.so’
    安装后不识别呀,php5.3.6的,难道不能在这个版本直接安装吗?一定要升级php版本?

  31. 花生
    花生 November 13, 2013

    啥时候内部也多分享一下啊

  32. redfox
    redfox November 12, 2013

    o+似乎没有考虑到对软连接和realpath cache的处理(5.2.10版本下)
    1 软连接
    有两个版本A,B,先软连接到版本A,运行一段时间后,软连接到版本B,结果缓存的还是版本A的
    解决办法的时候,accel_make_persistent_key_ex函数里,如果有opened_path,则用opened_path,否则用filename做为key
    2 软连接 + realpath cache
    这种情况下,得到的也不是预期的效果,还是老版本,由于被realpath cache缓存住path了,虽然这个不是o+的问题,但是希望能够解决一下

  33. CoderKing
    CoderKing November 12, 2013

    windows版本的dll文件有下载地址吗?

  34. JQYang
    JQYang November 12, 2013

    好多错别字啊。。。

Comments are closed.