opcache开启前后性能对⽐
opcache PHP新的字节码缓存扩展
字节码缓存组件 Zend Optimizer+ 现在更改名字为 Zend opcache了。且在php 5.5版本后,会集成到php的官⽅组件中,也就没有必要安装其他的APC,eAccelerator等了。。
APC与Opcache都是字节码缓存也就是,PHP在被编译的时候,⾸先会把php代码转换为字节码,字节码然后被执⾏。
php⽂件第⼆次执⾏时,同样还是会重新转换为字节码,但是很多时候,⽂件内容⼏乎是⼀样的,⽐如静态HTML⽂件,⽣成后内容许久都不会改变,⽤户访问请求直接由服务器读取响应给客户端浏览器。都不⽤经过PHP进⾏解析构建了。
内存中的字节码数据,可以直接缓存进⾏⼆次编译。这样程序就会快⼀些,cpu的消耗也少了。
详细介绍看这两篇
新⼀代 PHP 加速插件 Zend Opcache
php的 zend opcache VS apc 性能⽐较
我主要是⽤来测试了⼀下phpcmsV9.5.4 的默认index.php主页,没有数据内容,但有sql查询操作
测试是Apache2.2.6 32Bit 服务器,PHP 5.4.26 ts,mysql 5.6.16 64Bit
ab 版本 This is ApacheBench, Version 2.3 <$Revision: 655654 $>
请求数:1000
并发数:10
没有加载opcache测试
第⼀次测试
吞吐率 38.46 rps,耗时26.001 s,每个请求耗时260.015 ms
第⼆次测试
吞吐率有所提⾼ 40.73 rps,耗时 24.554 s,每个请求耗时245.544 ms
加载opcache进⾏测试
opcache版本 php_opcache-7.0.3-5.4-ts-vc9-x86
opcache配置信息
<_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.fast_shutdown=1
第⼀次配置opcache好后 cache 状态
cache hits 命中数 1
cache misses 未命中数 1
使⽤内存225.2Kb
opcache第⼀次测试
吞吐率提升到49.11rps,总耗时20.361 s,每个请求耗时下降到203.612 ms
在phpinfo中可查看opcache的命中数量情况
命中数量已达到43957,内存使⽤2.31Mb。
opcache第⼆次测试
php中header是什么意思吞吐率提升到47.87rps,总耗时20.888 s,每个请求耗时下降到208.882 ms
opcache之后的两次压测数据变化不⼤,每个请求耗时在1ms差距内,吞吐率也在1~2 rps
但与之前未启⽤opcache时,总耗时少了4 ~ 6 s,每个请求耗时少了40 ~ 60 ms。吞吐率也提升了 8%。
这都是在⼀⾏代码未改的情况下有效性能提升。
php⽂件被编译为字节码进⾏内存缓存,如果在⽣成环境中,代码和内容变量都是⽐较固定的
缓存起来的内容就可以⾼速的返回,⽤户会得到较快的响应。
但是在本地开发是,建议不要开启opcache,否则就得不到最新的值
例如:
<?php
header('Content-type:text/html; charset=utf-8');
$str = 'abc';
echo$str; // 输出abc
>
赋予$str ⼀个新的值
<?php
header('Content-type:text/html; charset=utf-8');
$str = 'new abc';
echo$str; // 输出的还是 abc
>
这是因为$str 已经被编译为字节码了,再次访问时,内存⾥⾯还是可以到对应的缓存,就没有进⾏重新编译,返回的值也就还是之前的值abc
不过,opcache有⼀个参数可以⽤来设置缓存时间长度
默认时间为180秒,还是建议本地不⽤开启opcache
opcache.force_restart_timeout (default "180")
注意:官⽅给了⼀个Note,如果opcache要与xdebug同时加载,那么opcache需要在xdebug之前进⾏加载。
但是我本地测试了⼀下,xdebug先加载,再加载opcache,也正常启动了,xdebug,opcache都加载成功,opcache缓存也正常。
不过还是按照官⽅的建议来安装加载,否则可能会出现奇怪的错误吧。
转载⾃
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论