一个关于Zend O+的小分享
作者: Laruence( )
本文地址: http://www.laruence.com/2013/11/11/2928.html
转载请注明出处
这个是我上周末在”阿里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
Zend Optimizer Plus(O+) from Xinchen Hui
Comments
2013/11/12, JQYang writes: 好多错别字啊。。。2013/11/12, PHP程序员 writes: 已经使用了opcache2013/11/12, CoderKing writes: windows版本的dll文件有下载地址吗?2013/11/12, redfox writes: 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+的问题,但是希望能够解决一下2013/11/13, 花生 writes: 啥时候内部也多分享一下啊2013/11/14, tiger writes: PHP Startup: Invalid library (maybe not a PHP library) 'opcache.so' 安装后不识别呀,php5.3.6的,难道不能在这个版本直接安装吗?一定要升级php版本?2013/11/15, Anonymous writes: 128 是M 还是KB 这是个问题,2013/11/15, tom916 writes: 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 02013/11/22, 非诚勿扰直播 writes: 调整配置!2013/11/26, Bags writes: 是cache的一种么?看起来像2013/11/26, bbtc writes: 是cache的一种么?看起来像。有测试报告否?2013/12/09, Star writes: 应该不错,大家有测试过么? 都用哪些测试工具? apache 的ab 还是其他工具?2013/12/09, phpcnc writes: Hello,博主,我搭建了个php社区,希望php能有个类似ruby,node的那种社区,现在社区刚刚上线,博主能帮忙介绍下吗?如果博主有兴趣加入那就更好了!地址为:http://phpcnc.org2013/12/11, 热豆腐 writes: 请问interned string在这里怎么理解?2013/12/19, zzq writes: 鸟哥一以后的ppt能不能给个网盘的 翻墙好恼火啊2013/12/30, 青岛珲莎舍 writes: 很好就是看不到图2013/12/31, 2013年最有价值博文TOP10 writes: [...] Zend Opcache PHP 5.4 PHP 5.5下的安装 - 个人认为这是PHP 5.5开始的一个最大飞跃,相关参考:一个关于Zend O+的小分享 [...]2014/01/06, hwanginsitein writes: $c = 3; $b = 6; if ($c=4 || $b=4){ $c++; $b++; } echo $c.$b; 输出啥? 为啥 是 172014/01/06, 雪候鸟 writes: @hwanginsitein 相当于( if ($c( =4 || $b=4) ) )2014/01/10, Lane writes: 学习了~~~~2014/01/15, dyllen writes: 这个扩展是不是直接开启就会生效,代码不需要做任何变化?2014/03/07, phpcleps writes: ZendOpcode性能确实不错! 目前我们测试,它不能与ZendGuardLoader共同。。。 请问有解决方案吗?2014/03/13, wild writes: opcache存在一个问题,在php-fpm启用chroot情况下,不同站点的相同名称的php文件,由于chroot下,路径也一致,导致缓存数据冲突,会把不同站点的相同名称的php当成同一个文件缓存起来。不知是算php-fpm问题,还是算opcache的问题。上次提问不是很清楚。2014/03/19, fengwei writes: 我在阿里云上装了zend_opcache(7.0.3)以及HHVM(2.5.0)做对比测试。 因为Yaf是php扩展方式,所以我用的一个其他的小框架做了一系列测试。测试情况是HHVM非常让我失望,最好情况下也和O+差不多。 不知道是否是我的HHVM配置有问题,或者阿里云有其他限制(这个需要有物理机来测试了) 如果其他人有做过类似情况能否说下测试结果呢? 测试环境用的阿里云低配。2014/03/30, Anonymous writes: 用了opcache后想用local cache怎么办?opcache不能像apc那样支持local cache.2014/06/09, 宁波公司注册 writes: 恩恩,支持下2014/07/25, php writes: 由于某些PHP缓存数据需要适时更新,OPCACHE如果能增加手动更新指定PHP文件的编译缓存,那就更完美了。2014/08/07, Google writes: Highly descriptive post, I enjoyed that a lot. Will there be a part 2? Feel free to surf to my page Google2014/08/19, Cheap Virtual Office in San Francisco writes: Every weekend i used to pay a visit this web site, because i wish for enjoyment, since this this web site conations truly fastidious funny data too. Take a look at my website: Cheap Virtual Office in San Francisco2014/08/27, simapple writes: opcache.interned_strings_buffer 这一项的配置很重要啊,我在使用的时候,这一项设置为4基本上没有空闲buffer,命中在98%,一单微调这个值,命中就急剧下降,在IIS下大多数时间表现正常,偶尔出现500错误,能自行恢复,原因尚不明确,期待opcache 越来越nb2014/10/30, 陈佳 writes: 正在使用,效果很好,非常感谢。2014/11/06, funbox writes: 与ZendOptimizer貌似不能共存 一些代码用旧版zend guard加密了 这回悲剧了2015/03/04, luyees writes: 鸟哥,能帮忙加一个友情链接吗?请回复哈。2015/05/10, php opcache | 柏新星 writes: [...] 一个关于Zend O+的小分享 [...]2015/08/19, alert(1) writes: alert(1)Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)Related Posts:
Yac (Yet Another Cache) – 无锁共享内存Cache让PHP7达到最高性能的几个TipsWeibo LAMP演变 – 6月在上海分享的PPT再一次, 不要使用(include/require)_once关于PHP的编译和执行分离上传进度支持(Upload progress in sessions)我对PHP5.4的一个改进PHP5.2.x + APC的一个bug的定位文章来源:
Author:Laruence
link:http://www.laruence.com/2013/11/11/2928.html