- 本文地址: https://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
Thanks
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
I am glad to see this brilliant post, all the details are very helpful and useful for us, keep up to good work.
[…] 官方下载:http://pecl.php.net/package/ZendOpcache 3、一个关于Zend O+的小分享:http://www.laruence.com/2013/11/11/2928.html 4、OCP -Opcache Control […]
不好意思请忽略楼下。。我回复错了博客
也可以这样:
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”;
}
鸟哥推荐,必为精品
alert(1)
[…] 一个关于Zend O+的小分享 […]
鸟哥,能帮忙加一个友情链接吗?请回复哈。
与ZendOptimizer貌似不能共存
一些代码用旧版zend guard加密了
这回悲剧了
正在使用,效果很好,非常感谢。
opcache.interned_strings_buffer 这一项的配置很重要啊,我在使用的时候,这一项设置为4基本上没有空闲buffer,命中在98%,一单微调这个值,命中就急剧下降,在IIS下大多数时间表现正常,偶尔出现500错误,能自行恢复,原因尚不明确,期待opcache 越来越nb
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 Francisco
Highly descriptive post, I enjoyed that a lot. Will there be a part 2?
Feel free to surf to my page Google
由于某些PHP缓存数据需要适时更新,OPCACHE如果能增加手动更新指定PHP文件的编译缓存,那就更完美了。
恩恩,支持下
用了opcache后想用local cache怎么办?opcache不能像apc那样支持local cache.
我在阿里云上装了zend_opcache(7.0.3)以及HHVM(2.5.0)做对比测试。
因为Yaf是php扩展方式,所以我用的一个其他的小框架做了一系列测试。测试情况是HHVM非常让我失望,最好情况下也和O+差不多。
不知道是否是我的HHVM配置有问题,或者阿里云有其他限制(这个需要有物理机来测试了)
如果其他人有做过类似情况能否说下测试结果呢?
测试环境用的阿里云低配。
opcache存在一个问题,在php-fpm启用chroot情况下,不同站点的相同名称的php文件,由于chroot下,路径也一致,导致缓存数据冲突,会把不同站点的相同名称的php当成同一个文件缓存起来。不知是算php-fpm问题,还是算opcache的问题。上次提问不是很清楚。
ZendOpcode性能确实不错!
目前我们测试,它不能与ZendGuardLoader共同。。。
请问有解决方案吗?
这个扩展是不是直接开启就会生效,代码不需要做任何变化?
学习了~~~~
@hwanginsitein 相当于( if ($c( =4 || $b=4) ) )
$c = 3;
$b = 6;
if ($c=4 || $b=4){
$c++;
$b++;
}
echo $c.$b;
输出啥?
为啥 是 17
[…] Zend Opcache PHP 5.4 PHP 5.5下的安装 – 个人认为这是PHP 5.5开始的一个最大飞跃,相关参考:一个关于Zend O+的小分享 […]
很好就是看不到图
鸟哥一以后的ppt能不能给个网盘的 翻墙好恼火啊
请问interned string在这里怎么理解?
Hello,博主,我搭建了个php社区,希望php能有个类似ruby,node的那种社区,现在社区刚刚上线,博主能帮忙介绍下吗?如果博主有兴趣加入那就更好了!地址为:http://phpcnc.org
应该不错,大家有测试过么? 都用哪些测试工具?
apache 的ab 还是其他工具?
是cache的一种么?看起来像。有测试报告否?
是cache的一种么?看起来像
调整配置!
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
128 是M 还是KB 这是个问题,
PHP Startup: Invalid library (maybe not a PHP library) ‘opcache.so’
安装后不识别呀,php5.3.6的,难道不能在这个版本直接安装吗?一定要升级php版本?
啥时候内部也多分享一下啊
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+的问题,但是希望能够解决一下
windows版本的dll文件有下载地址吗?
已经使用了opcache
好多错别字啊。。。