众所周知,PHP5.5以后官方自带了一个组件叫Zend Opcache,具体可以参看官方文档。开启此扩展后可以提高PHP的执行效率,具体提升多大我会在最后给一个简简单单的测试,提供给大家参考。

Opcache的执行流程大致如下,

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

由于这篇文章的本意是想记录以及备注一下开启opcache后出现的一些问题,所以这篇文章不会记录如何安装opcache以及如何配置,推荐这篇文章大家参考一下就可以了,配置说的都很明确了。

正文

在配置中有2个配置很重要,需要重点关注opcache.validate_timestamps=0;

opcache.revalidate_freq=60;

validate_timestamps用于验证是否要重新生成缓存脚本, 如果设置为 0(性能最佳),需要手动在每次 PHP 代码更改后手动清除 OPcache。 如果此值为0,那么revalidate_freq将失去作用。

revalidate_freq用于控制opcache多久生成一次缓存字节码,默认60s。所以一般我们在开发环境中将上面两个值配置为opcache.validate_timestamps=1;

opcache.revalidate_freq=1;

或者干脆直接关闭opcache。

上面提到了,如果将validate_timestamps配置为0以后,我们每次部署PHP的时候默认是不会自动生成缓存。这句话其是是不严谨的,因为部署PHP的时候有两种方式,一种是直接覆盖就文件,另一种是使用CI发布会自动生成新的部署目录,并通过软连接的方式指定到web目录

如果是第一种部署方式的话,opcache确实不会自动生成缓存,因为opcache通过文件的真实路径进行缓存,如果文件存在就不会再次缓存,也就导致了部署后线上并没有看到新的功能代码。

而另一种方式的确会主动生成缓存,因为上面说了,opcache是通过文件的真实路径进行缓存的,这就导致了每次部署都会生成缓存字节码,那么就导致了旧的缓存没有被清理,那么迟早有一天会撑爆内存。

所以,在部署代码的时候如何清理opcahce生成的缓存就成为了关键所在。

解决方案

通过搜索实践发现了几种方式,分别为平滑重启php-fpm

通过opcache_reset()函数

第三方库

平滑重启的方式就类似下面这样,通过部署钩子实现cd /www/myproject

sudo -u www git reset --hard

sudo -u www git pull origin master

sudo -u root /etc/init.d/php-fpm-73 reload

使用opcache_reset()函数需要注意的问题就是在cli命令行下执行此函数并不能清理php-fpm下生成的缓存字节码,所以可以通过一种曲线救国的方式curl http://example.com/op.php

这个op.php文件里面就专门执行opcache_reset()函数,但是这种方式总感觉有点怪怪的。

通过第三方库(推荐)的方式,大佬推荐cachetool

.

.

.

简单测试

下面的几次简单测试是在我们的预生产环境上测试的,使用了微擎框架,而并不是简单的打印helloworld方式。

未开启opcache情况

开启opcache情况

从上面的截图中就可以看出,未开启opcache的情况下,基本稳定在70-90左右,但是开启opcache后,由于第一次请求需要生成缓存字节码所以耗时有点久,达到了140ms,但是第二次以及后面的请求都稳定在50ms左右,所以可以看出提升性能还是很明显的。

参考资料

php 开启 opcache,PHP开启Opcache后的一些坑相关推荐

  1. php查看opcache是否开启,开启opcache

    查看和分析当前的Opcache加速效果那?答案是可以使用下Github上开源的项目:https://github.com/rlerdorf/opcache-status 将下载下来的项目放入到当前的W ...

  2. 计算机服务怎么打开flash,开启Flash Helper Service服务后自动关闭要怎么解决?

    开启Flash Helper Service服务后总是自动关闭怎么解决?许多电脑用户在使用各种浏览器等等软件的时候总是会出现必要的系统组件未能正常运行,这时候就很懵,都不知道什么地方出了问题.其实这大 ...

  3. LNMP nginx1.4.6+php5.5.11+mysql5.6.17+mecache+opcache编译安装+opcache参数详解+opcache可视化php页面代码

    可能要用到的软件: libiconv-1.13.tar.gz  libmcrypt-2.5.8.tar.gz  mcrypt-2.6.8.tar.gz  mhash-0.9.9.9.tar.gz  m ...

  4. php opcache 作者,PHP Opcache配置

    About OPcache configure 接下来,我们需要在 PHP 的配置文件中启用 OPcache(默认是关闭的): opcache.enable=1 下面我们继续对 OPcache 进行一 ...

  5. php opcache配置,PHP Opcache 配置优化实战

    前言 起源:在很长的一段时间里,我们的web服务器在遇到大规模流量访问的时候,很容易就把 CPU 负载飙到了 100%,导致响应速度过慢,用户体验卡顿,直到最近开启了Opcahe后,我们的QPS从20 ...

  6. php opcache缺点,PHP Opcache 注意事项以及调优

    从 PHP5.5 开始,Opcache 扩展是核心的一部分,增加了对 PHP 脚本的字节码缓存的支持.对于动态语言(例如 PHP ),字节码缓存可以显著的提高性能,因为它可以确保脚本仅被编译一次. O ...

  7. php opcache 安装,php opcache安装和配置

    环境介绍 操作系统:Centos 6.* ( 双核4G.硬盘至少20G) php 版本:7.0.8(也可去官网下载最新版本http://php.net/downloads.php ) 一:php编译安 ...

  8. php 5.6 zend opcache,使用Zend OpCache 提高 PHP 5.5+ 性能

    PHP 5.5 以后内建了OpCache,我们启用即可OpCache的加速原理是把编译后的bytecode存储在内存里面, 避免重复编译 PHP 所造成的资源浪费. 虽然内建了, 但是默认没有启用: ...

  9. oppo手机如何开启云服务器,开启OPPO云服务,手机丢了也能找回来

    原标题:开启OPPO云服务,手机丢了也能找回来 昨天,OPPO在官微上发布了1分钟了解OPPO云服务的内容,宣布OPPO手机将开启OPPO云服务,看了短片相信让很多人对OPPO云服务有一个全新的了解. ...

最新文章

  1. phpstrom xdebug配置
  2. 反射和内省_单例设计模式–内省和最佳实践
  3. win32开发(按键消息)
  4. @Transactional之Spring事务深入理解
  5. 强制换行的css属性
  6. 如何领购和作废电子发票流程
  7. 51单片机最小系统电路图
  8. python 豆瓣源安装_python pip使用豆瓣源技巧和pip配置文件更改豆瓣源
  9. 流程图flow-chart 教程
  10. NOIP 2016 天天爱跑步
  11. MySQL之binlog
  12. K-means 算法实现二维数据聚类
  13. 看了数据分析师的摆摊神操作,网友:这才叫专业
  14. 经典数值RPG游戏——《魔塔》调研报告
  15. 最新研究进展:关于机器翻译领域,这4个要点不得不关注
  16. additiv.sh
  17. 【Kubernetes 018】cfssl创建证书并结合RBAC的RoleBinding配置新用户config文件操作详解
  18. 国内唯一同时发行A股B股和H股的公司
  19. vhdl计算机语言,八周造个CPU(1):VHDL语言的实现和仿真方法,简单PC模块的实现和仿真...
  20. Testin-手机兼容性测试

热门文章

  1. VMware Pro v14.1.1 激活密钥
  2. 用pandas写一个csv表格文件
  3. MyBatis 查询时间区间
  4. 人体解剖学章节练习题及答案(同步)有答案
  5. 系统调用之sys_nanosleep
  6. 一码多付(扫码支付)原理
  7. #ifndef在头文件中的作用
  8. 6种在 Python 中从 List 中删除重复项的方法
  9. js的settimeout用法总结
  10. Unity 监听键盘按键