教程集 www.jiaochengji.com
教程集 >  脚本编程  >  php  >  正文 opcache PHP新的字节码缓存扩展详解

opcache PHP新的字节码缓存扩展详解

发布时间:2017-10-25   编辑:jiaochengji.com
教程集为您提供opcache PHP新的字节码缓存扩展详解等资源,欢迎您收藏本站,我们将为您提供最新的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测试

第一次测试


p

吞吐率 38.46 rps,耗时26.001 s,每个请求耗时260.015 ms
第二次测试

p2

吞吐率有所提高 40.73 rps,耗时 24.554 s,每个请求耗时245.544 ms

加载opcache进行测试
opcache版本 php_opcache-7.0.3-5.4-ts-vc9-x86

opcache配置信息

 

<table> <tbody> <tr> <td><code>1</code></td> <td><code>opcache.memory_consumption=128</code></td> </tr> </tbody> </table>
<table> <tbody> <tr> <td><code>2</code></td> <td><code>opcache.interned_strings_buffer=8</code></td> </tr> </tbody> </table>
<table> <tbody> <tr> <td><code>3</code></td> <td><code>opcache.max_accelerated_files=4000</code></td> </tr> </tbody> </table>
<table> <tbody> <tr> <td><code>4</code></td> <td><code>opcache.revalidate_freq=60</code></td> </tr> </tbody> </table>
<table> <tbody> <tr> <td><code>5</code></td> <td><code>opcache.fast_shutdown=1</code></td> </tr> </tbody> </table>
<table> <tbody> <tr> <td><code>6</code></td> <td><code>opcache.enable_cli=1</code></td> </tr> </tbody> </table>
 
第一次配置opcache好后 cache 状态
cstat
 
cache hits 命中数 1
cache misses 未命中数 1
使用内存225.2Kb
opcache第一次测试
p_c1
吞吐率提升到49.11rps,总耗时20.361 s,每个请求耗时下降到203.612 ms
在phpinfo中可查看opcache的命中数量情况
cstat_c
命中数量已达到43957,内存使用2.31Mb。
opcache第二次测试
p_c2
吞吐率提升到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有一个参数可以用来设置缓存时间长度


opcache.force_restart_timeout (default "180")

默认时间为180秒,还是建议本地不用开启opcache

 

注意:官方给了一个Note,如果opcache要与xdebug同时加载,那么opcache需要在xdebug之前进行加载。

但是我本地测试了一下,xdebug先加载,再加载opcache,也正常启动了,xdebug,opcache都加载成功,opcache缓存也正常。

不过还是按照官方的建议来安装加载,否则可能会出现奇怪的错误吧

您可能感兴趣的文章:
opcache PHP新的字节码缓存扩展详解
PHP字节码缓存和内置服务器
PHP生命周期及fpm的运作方式
Zend OPCache加速PHP使用说明
给PHP安装配置Opcache缓存功能
PHP并发性能调优实战(性能提升104%)
opcode cache与JIT之间有哪些区别
php apc缓存使用实例
在CentOS上php5.6怎么安装?
安装及配置eaccelerator-0.9.5加速PHP-5.2.1

[关闭]
~ ~