启用OPCache提高PHP程序性能的方法


Posted in PHP onMarch 21, 2019

说明

PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的)。对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHP APC加速的方法。

opcache是Zend Optimizer编译到php环境中的名字,意思即优化缓存。Zend OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是省去了每次加载和解析 PHP 脚本的开销。

这个PHP加速插件的主要原理就是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的。

在 PHP 5.5及以后的版本中 OpCache 已内建该模块,在编译安装php时使用 --enable-opcache 即可在以后的开发工作中正常使用Opcache了。

(1)在命令行下可通过如下命令检查是否已经安装了OPcache:

php -m | grep "OPcache"

有结果则代表已安装了。

(2)安装OPCache模块

如果你的php环境没有安装该模块,也可以通过如下方法进行安装:

依次执行下面的命令

wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
tar xzf zendopcache-7.0.2.tgz
cd zendopcache-7.0.2
phpize

(如果不知道 phpize 在哪里的话可以通过 find 命令进行查找,也可以找到PHP路径,通常是在一起的,我的就在/alidata/server/php/bin/phpize,下面这行也要按你的php.ini路径自行修改)

./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

如果显示Installing shared extensions: /alidata/server/php/lib/php/extensions/no-debug-zts-20100525/ 则表示安装成功了。

(3)开启OPCache模块支持

找到php.ini文件,在文件末尾加上如下代码(如果已经存在[opcache]这个标签了,则只需在这个标签下做相应的添加或者修改):

[opcache]
; dll地址
zend_extension=php_opcache.dll
; 开关打开
opcache.enable=1
; 开启CLI
opcache.enable_cli=1
; 可用内存, 酌情而定, 单位为:Mb
opcache.memory_consumption=128
; Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)
opcache.interned_strings_buffer=8
; 对多缓存文件限制, 命中率不到 100% 的话, 可以试着提高这个值
opcache.max_accelerated_files=10000
; Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 定位为秒
opcache.revalidate_freq=1
; 打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高
opcache.fast_shutdown=1
; 不保存文件/函数的注释
opcache.save_comments=0

添加完毕重启apache或者nginx服务器,打开phpinfo页面看看是否已经生效,如果看到如下信息则代表已经配置成功了。

启用OPCache提高PHP程序性能的方法

(4)功能测试以及注意事项

在phpinfo()信息中, 目前来看有两条信息犹为重要:

  • Cache hits     (高级缓存命中)
  • Cache misses  (高级缓存未命中)

通过这两条信息中即可观察缓存运行情况。

我们做个测试,验证一下什么是opcache,新建包含如下代码的一个文件:

echo 'hello opcache';

这是一段非常简单的php代码,请保存为demo.php文件然后访问,随意刷新,Cache hits数值会不停地增加,说明起作用了。

然后你修改代码为:

echo 'hello codetc.com';

再刷新demo.php,应该可以看到效果,打印出来的值仍然是 hello opcache,即源码被缓存了,它不再解析demo.php文件。

那多少秒之后其结果才会变为 hello phpernote.com 呢?这里可通过设置:

opcache.force_restart_timeout=180

的时间来控制更新速度,这里的单位是秒,即180秒后重新编译一次源php编码。

这就类似于web项目中的静态文件缓存一下,比如我们加载一个网页,浏览器会自动帮我们把jpg,css缓存起来,唯独php没有缓存,每次均需要open文件,解析代码, 执行代码这一过程,而opcache即可解决这个问题,代码会被高速缓存起来,提升访问速度。

所以当改变PHP文件代码后,并不能立即看到效果,这视opcache.revalidate_freq的更新周期而定,所以建议在项目更新执行自动化脚本利用opcache_reset()函数自动重置opcache。OPcache总共提供了如下几个函数:

  • opcache_compile_file — 无需运行,即可编译并缓存 PHP 脚本
  • opcache_get_configuration — 获取缓存的配置信息
  • opcache_get_status — 获取缓存的状态信息
  • opcache_invalidate — 废除脚本缓存
  • opcache_reset — 重置字节码缓存的内容

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
15个小时----从修改程序到自己些程序
Oct 09 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
检查php文件中是否含有bom的函数
May 31 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
PHP中的reflection反射机制测试例子
Aug 05 PHP
10个简化PHP开发的工具
Dec 25 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
如何写php守护进程(Daemon)
Dec 30 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
php实现查询功能(数据访问)
May 23 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 #PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 #PHP
PHP实现的数据对象映射模式详解
Mar 20 #PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 #PHP
PHP实现的策略模式示例
Mar 20 #PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 #PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 #PHP
You might like
编写PHP的安全策略
2006/10/09 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
php递归实现无限分类的方法
2015/07/28 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
PHP 无限级分类
2017/05/04 PHP
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
javascript实现时钟动画
2020/12/03 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
.net C#面试题
2012/08/28 面试题
解除财产保全担保书
2014/05/20 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
公司新员工欢迎词
2015/09/30 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android