启用OPCache提高PHP程序性能的方法
说明
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页面看看是否已经生效,如果看到如下信息则代表已经配置成功了。
(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 — 重置字节码缓存的内容
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。如果你想了解更多相关内容请查看下面相关链接
- HDU 2602 Bone Collector(01背包裸题)
- Appium+python自动化13-native和webview切换
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
- 专知内容生产基石-数据爬取采集利器WebCollector 介绍
- python实现字符串模糊匹配
- 动态规划之01背包详解【解题报告】
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
- HDU 2546 饭卡(01背包裸题)
- 漫谈文件系统
- AI知识搜索利器:基于ElasticSearch构建专知实时高性能搜索系统
- 【深度干货】专知主题链路知识推荐#5-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程01
- hihoCoder #1043 : 完全背包(板子题)
- 【深度干货】专知主题链路知识推荐#7-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程02
- hihoCoder #1038 : 01背包(板子题)
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- php精度计算的问题解析
- PHP使用Session实现上传进度功能详解
- php常用字符串查找函数strstr()与strpos()实例分析
- php 根据URL下载远程图片、压缩包、pdf等文件到本地
- PHP使用HTML5 FormData对象提交表单操作示例
- python接入支付宝的实例操作
- php实现网页上一页下一页翻页过程详解
- Yii 使用intervention/image拓展实现图像处理功能
- PHP常用的类封装小结【4个工具类】
- 微信公众号之主动给用户发送消息功能
- laravel异步监控定时调度器实例详解
- python按顺序重命名文件并分类转移到各个文件夹中的实现代码
- Python实现删除某列中含有空值的行的示例代码
- python打开音乐文件的实例方法
- PHP基础之输出缓冲区基本概念、原理分析