启用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 相关文章推荐
PHP 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
PHP同时连接多个mysql数据库示例代码
Mar 17 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
php常用正则函数实例小结
Dec 29 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
利用php + Laravel如何实现部署自动化详解
Oct 11 PHP
php微信公众号开发之翻页查询
Oct 20 PHP
PHP的PDO事务与自动提交
Jan 24 PHP
php防止表单重复提交实例讲解
Feb 11 PHP
关于laravel 子查询 & join的使用
Oct 16 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
Django实现发送邮件功能
2019/07/18 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
Python生成器实现简单"生产者消费者"模型代码实例
2020/03/27 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
客服专员岗位职责范本
2013/11/29 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
小学六一主持词开场白
2015/05/28 职场文书
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers