opcache php性能提升用法小结
2016-07-28 17:21
681 查看
简介
当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode cache的目地是避免重复编译,减少CPU和内存开销,OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。工作原理
PHP执行代码会经过如下4个步骤(zend)input(PHP代码)->词法分析 ->语法分析 ->opcode ->Zend engine- >output
增加opcache之后,会变成以下步骤:
安装
PHP 5.5+以后内建了opcache,编译安装的时候--enable-opcache 就可以了。其它版本需要下载和编译
下载
https://pecl.php.net/package/ZendOpcache 7.0.4.tgz 官网
编译扩展
wget https://pecl.php.net/get/zendopcache-7.0.4.tgz tar xzf zendopcache-7.0.4.tgz cd zendopcache-7.0.4 /usr/local/bin/phpize ./configure --with-php-config=/usr/local/bin/php-config make && make install
增加以下代码到php.ini文件中
[opcache] zend_extension=opcache.so
重启 php
service php-fpm restart
opcache安装成功
使用
配置参数
opcache.enable=1 #开关 默认打开 opcache.enable_cli=1 # opcache.validate_timestamps=1 # 默认1 如果置为1,则OPCACHE会自动检测文件的时间戳(检测周期为revalidate_freq), opcache.memory_consumption=128 # 可用内存 单位M opcache.revalidate_freq=60 # 多少秒检测下php文件是否变动 opcache.optimization_level=1 opcache.error_log=/opt/logs/php/php_opcache.log #opcache 错误日志 opcache.log_verbosity_level =1 #将错误信息都导向 Web 服务器日志.默认的只有致命错误(level 0) 或者错误(level 1)才会被记录. opcache.max_wasted_percentage=5 #“浪费”的内存达到此值对应的百分比,就会发起一个重启调度 opcache.interned_strings_buffer=8 #interned string的内存大小 opcache.max_accelerated_files=4096 # 文件数量 opcache.max_file_size=0 #被cache的文件的最大size,单位bytes。0表示不限 opcache.fast_shutdown=1 #打开时可使php在request shutdown时回收内 opcache.force_restart_timeout=30 #如果opcache处于非active状态,当N秒后opcache将自动重启
可以根据图形展示界面的效果去调整参数.
注意
典型的问题就是由于opcache的缓存加速机制导致的代码变更后无法立即看到效果,所以在开发环境下可以通过设置revalidate_freq时间,或者更新代码后重启php-fpm.
个人觉得最好的方式还是上传更新代码后,自动执行一个脚本,调用
opcache_reset()函数重置所有opcache缓存字节码。
<?php if (extension_loaded('Zend OPcache')) { var_dump(opcache_reset()); }
图形界面展示
https://github.com/rlerdorf/opcache-statushttps://github.com/PeeHaa/OpCacheGUI
扩展阅读
深入理解PHP原理之OpcodesPHP Opcode内核实现
opcache缓存疑问
PHP安装与使用VLD查看opcode代码
相关文章推荐
- php基础知识
- 基于PHP的对接电子面单接口平台案例
- sftp没有关闭session导致服务器sshd进程未关闭
- 提高PHP代码质量36计
- 23种PHP设计模式的有趣诠释
- thinkphp表单上传文件并将文件路径保存到数据库中
- php webservice服务端和客户端的实现
- 搞搞php
- thinkphp验证码的实现(form、ajax实现验证)
- php的soap无故出错的真凶:wsdl缓存
- PhpExcel中文帮助手册|PhpExcel使用方法
- laravel知识拾遗
- php开启curl和openssl
- php乱七八糟的问题-防止重复提交
- yii2框架-restful的基础入门(二十一)
- tps 与 事务平均响应时间关系对答(转)
- thinkphp 写日志文件
- Thinkphp3.2.3分页使用实例解析
- ZendStudio13 PHP调试环境快速配置
- PHP商品秒杀计时实现(解决大流量方案)