PHP7如何开启Opcode打造强悍性能详解


Posted in PHP onMay 11, 2018

前言

鸟哥在博客中说,提高PHP 7性能的几个tips,第一条就是开启opcache:

记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情

那么什么是Opcache呢?

Opcache 的前生是 Optimizer+ ,它是PHP的官方公司 Zend 开发的一款闭源但可以免费使用的 PHP 优化加速组件。 Optimizer+ 将PHP代码预编译生成的脚本文件 Opcode 缓存在共享内存中供以后反复使用,从而避免了从磁盘读取代码再次编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。从而加速PHP的执行。

 PHP的正常执行流程如下

PHP7如何开启Opcode打造强悍性能详解

 request请求(nginx,apache,cli等)-->Zend引擎读取.php文件-->扫描其词典和表达式 -->解析文件-->创建要执行的计算机代码(称为Opcode)-->最后执行Opcode--> response 返回

每一次请求PHP脚本都会执行一遍以上步骤,如果PHP源代码没有变化,那么Opcode也不会变化,显然没有必要每次都重新生成Opcode,结合在Web中无所不在的缓存机制,我们可以把Opcode缓存下来,以后直接访问缓存的Opcode岂不是更快,启用Opcode缓存之后的流程图如下所示:

PHP7如何开启Opcode打造强悍性能详解 

 Opcode cache 的目地是避免重复编译,减少 CPU 和内存开销。

下面介绍Opcache的安装

安装:

1、找到opcache的扩展,我的是php7.1

yum list php71*

2、安装扩展

yum install php71w-opcache.x86_64

配置:

zend_extension=opcache.so
[opcache]
;开启opcache
opcache.enable=1 

;CLI环境下,PHP启用OPcache
opcache.enable_cli=1

;OPcache共享内存存储大小,单位MB
opcache.memory_consumption=128 

;PHP使用了一种叫做字符串驻留(string interning)的技术来改善性能。例如,如果你在代码中使用了1000次字符串“foobar”,在PHP内部只会在第一使用这个字符串的时候分配一个不可变的内存区域来存储这个字符串,其他的999次使用都会直接指向这个内存区域。这个选项则会把这个特性提升一个层次——默认情况下这个不可变的内存区域只会存在于单个php-fpm的进程中,如果设置了这个选项,那么它将会在所有的php-fpm进程中共享。在比较大的应用中,这可以非常有效地节约内存,提高应用的性能。
这个选项的值是以兆字节(megabytes)作为单位,如果把它设置为16,则表示16MB,默认是4MB
opcache.interned_strings_buffer=8

;这个选项用于控制内存中最多可以缓存多少个PHP文件。这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和。
设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。也就是说在200到1000000之间。
opcache.max_accelerated_files=4000

;设置缓存的过期时间(单位是秒),为0的话每次都要检查
opcache.revalidate_freq=60

;从字面上理解就是“允许更快速关闭”。它的作用是在单个请求结束时提供一种更快速的机制来调用代码中的析构器,从而加快PHP的响应速度和PHP进程资源的回收速度,这样应用程序可以更快速地响应下一个请求。把它设置为1就可以使用这个机制了。
opcache.fast_shutdown=1

;如果启用(设置为1),OPcache会在opcache.revalidate_freq设置的秒数去检测文件的时间戳(timestamp)检查脚本是否更新。
如果这个选项被禁用(设置为0),opcache.revalidate_freq会被忽略,PHP文件永远不会被检查。这意味着如果你修改了你的代码,然后你把它更新到服务器上,再在浏览器上请求更新的代码对应的功能,你会看不到更新的效果
强烈建议你在生产环境中设置为0,更新代码后,再平滑重启PHP和web服务器。
opcache.validate_timestamps=0

;开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.
这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.
opcache.file_cache=/tmp

查看phpinfo:

PHP7如何开启Opcode打造强悍性能详解

测试结果:

PHP7如何开启Opcode打造强悍性能详解

同样的接口从以前的几百毫秒提升到现在的50ms左右

PHP7如何开启Opcode打造强悍性能详解

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php 404错误页面实现代码
Jun 22 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
php垃圾代码优化操作代码
Aug 05 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
php的array数组和使用实例简明教程(容易理解)
Mar 20 PHP
php中opendir函数用法实例
Nov 15 PHP
PHP实现的带超时功能get_headers函数
Feb 10 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
laravel-admin 中列表筛选方法
Oct 03 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 #PHP
PHP实现搜索时记住状态的方法示例
May 11 #PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 #PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 #PHP
PHP分页显示的方法分析【附PHP通用分页类】
May 10 #PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 #PHP
PHP实现用户登录的案例代码
May 10 #PHP
You might like
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
php 中文处理函数集合
2008/08/27 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
php 生成短网址原理及代码
2014/01/23 PHP
php查询操作实现投票功能
2016/05/09 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python实现两款计算器功能示例
2017/12/19 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
经理管理专业自荐信范文
2013/12/31 职场文书
好好学习保证书
2015/02/26 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python