php7 opcache缓存清理问题-csdn博客


本站和网页 https://blog.csdn.net/weixin_33696822/article/details/92772021 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

PHP7 opcache缓存清理问题-CSDN博客
PHP7 opcache缓存清理问题
最新推荐文章于 2024-04-21 13:56:08 发布
weixin_33696822
阅读量657 收藏 1 点赞数 文章标签: php 运维 原文链接:
http://blog.51cto.com/liuqunying/1950277
版权
背景
OPcache通过opcode的缓存和优化,提供更快的PHP执行过程。
业务在php7环境运营时,为了提升请求的性能,在PHP7环境中配置OPcache扩展。
业务在更新代码后,访问业务系统时提示无法找到对应的文件或请求的内容还是更新前的旧内容,
webserver重启以后,请求访问到的文件就都是最新的了,问题就貌似解决了。
问题分析
根据现象分析,代码更新后请求找不到新增的文件,尤其是还在请求已有文件更新前的内容,那么可能跟缓存有关系,考虑到跟业务代码逻辑无关,关闭opcache的配置问题就不再出现,基本上可以定位到问题出在opcache的配置上。
cat /usr/local/php/etc/subconfig/opcache.inizend_extension=opcache.soopcache.enable=1opcache.revalidate_freq=0opcache.validate_timestamps=0opcache.max_accelerated_files=7963opcache.memory_consumption=192opcache.interned_strings_buffer=16opcache.fast_shutdown=1opcache.enable_cli=1
opcache.enable
 启用操作码缓存,默认为“1”
如果禁用此选项,则不会优化和缓存代码。 在运行期使用 ini_set() 函数只能禁用 opcache.enable 设置,不可以启用此设置。 如果在脚本中尝试启用此设置项会产生警告。
opcache.enable_cli
  仅针对 CLI 版本的 PHP 启用操作码缓存。
 通常被用来测试和调试。
opcache.revalidate_freq
=0  检查脚本时间戳是否有更新的周期,以秒为单位。
设置为 0 会导致针对每个请求, OPcache 都会检查脚本更新。
opcache.validate_timestamps
=0  如果启用,那么 OPcache 会每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新。
如果禁用此选项,你必须使用 opcache_reset() 或者 opcache_invalidate() 函数来手动重置 OPcache,也可以 通过重启 Web 服务器来使文件系统更改生效。
最初的配置是:
opcache.revalidate_freq=60,opcache.validate_timestamps=1
即每60秒检测一次更新字节码缓存,业务代码更新后可能需要60秒以后才能访问到最新的内容,也就出现了最初访问不到新增的内容。
代码更新方式
php代码的更新方式有两种,一种是覆盖webserver配置的目录下的文件来更新,一种是每次都部署一个全量包目录,然后软链接到webserver指定的目录。
第一种覆盖更新的方式,如果使用在过期时间后自动清理opcache缓存内容的话,更新操作如果有延迟,就会出现新旧代码文件混合在一起的情况。
第二种全量包目录发布后,软链接到webserver指定路径的方式,虽然不会存在新旧文件混合的问题,但是在未自动清理时,即便webserver已经链接到webserver对应目录,业务访问的还是旧文件。
代码缓存的问题
目前使用rsync同步目录文件的方式是我们更新代码的主要方式,最初使用每60s定时清理opcache的缓存文件,在60s内更新的文件不会生效,就导致了业务反馈代码更新后访问不到的问题。
使用定时更新代码缓存的问题,还有更新文件较多时,代码文件发布的过程中缓存发生更新,将会有60s新旧文件的缓存混合存在的问题。
根据相关研究人员推荐,如果采用覆盖更新代码文件时,更新操作完毕后,手动清理缓存比较合适。
opcache.validate_timestamps=0
 即,将oopcache.validate_timestamps设置为0。
配置了opcache.validate_timestamps值为0,必须手动清空Zend OPcache缓存的字节码,才能访问到最新的文件内容。适合在生产环境中设置为0,但在开发环境会带来不便,可以在开发环境中这样配置启用自动验证缓存功能:
opcache.validate_timestamps=1
opcache.revalidate_freq=0
手动清理缓存
除了重启php-fpm的进程可以清理opcache缓存外,
手动清理缓存涉及到的opcache函数主要为:opcache_reset()和opcache_invalidate() 。
boolean opcache_reset ( void )
该函数将重置整个字节码缓存。 
在调用 opcache_reset() 之后,所有的脚本将会重新载入并且在下次被点击的时候重新解析。
需要注意的是,当PHP以PHP-FPM的方式运行的时候,opcache的缓存是无法通过php命令进行清除的,只能通过http或cgi到php-fpm进程的方式来清除缓存。
In some (most?) systems,
PHP's CLI has a separate opcode cache to the one used by the web server ,
or PHP-FPM process,which means running opcache_reset() in the CLI,
won't reset the webserver/fpm opcode cache, and vice-versa.
曲线救国,使用命令行清理php-fpm的opcache缓存:
#!/bin/bashcgi-fcgi -v  > /dev/null 2>&1|| yum --enablerepo=epel install fcgi -y  > /dev/null 2>&1echo '<?php opcache_reset(); echo "ok\n";' > /tmp/php-fpm-opcache-reset.php;
SCRIPT_FILENAME=/tmp/php-fpm-opcache-reset.php \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect 127.0.0.1:9000;
rm -f /tmp/php-fpm-opcache-reset.php;
opcache_invalidate  废除指定脚本缓存
boolean opcache_invalidate ( string $script [, boolean $force = FALSE ] )
该函数的作用是使得指定脚本的字节码缓存失效。 如果 force 没有设置或者传入的是 FALSE,那么只有当脚本的修改时间 比对应字节码的时间更新,脚本的缓存才会失效。
参数 
script
缓存需要被作废对应的脚本路径
force
如果该参数设置为TRUE,那么不管是否必要,该脚本的缓存都将被废除。
opcache_invalidate可以针对单个或几个脚本进行来清理缓存。
总结
如果代码发布是全量发布,切换软链接的方式,可以设置opcache.validate_timestamps=1和opcache.validate_timestamps=1来定时自动更新缓存。
如果代码发布是覆盖更新旧目录,则可以重启php-fpm及在脚本中或代码文件中使用opcache_reset函数来清理所有缓存。
如果可以获取到更新的代码文件列表,则可以使用opcache_invalidate函数来清理代码,同时也可以避免影响到其他业务的缓存。
转载于:https://blog.51cto.com/liuqunying/1950277
优惠劵
关注
点赞
觉得还不错?
一键收藏
知道了
评论
PHP7 opcache缓存清理问题背景OPcache通过opcode的缓存和优化,提供更快的PHP执行过程。业务在php7环境运营时,为了提升请求的性能,在PHP7环境中配置OPcache扩展。业务在更新代码后,访问业务系统时提示无法找到对应的文件或请求的内容还是更新前的旧内容,webserver重启以后,请求访问到的文件就都是最新的了,问题就貌似解决了。问题分析根据现象分...
复制链接
扫一扫
解决
PHP
Opc
ache
缓存
刷新、
代码
重载出现无法更新
问题
10-14
主要介绍了解决
重载出现的无法更新
,帮助大家更好的理解和学习
,感兴趣的朋友可以了解下
注意事项以及调优
weixin_43814458的博客
01-17
1133
5.5 开始,
扩展是核心的一部分,增加了对
脚本的字节码
的支持。对于动态语言(例如
),字节码
可以显著的提高性能,因为它可以确保脚本仅被编译一次。
扩展的默认设置已经在很大程度上提高了
的性能,但是您可以通过修改默认配置以获取更佳的性能。
警告:这篇文章反复提到的监视统计信息
opc
_get_status(fal...
参与评论
您还未登录,请先
登录
后发表或查看评论
坑,
清理
weixin_39864489的博客
03-09
583
OPc
通过
ode的
和优化,提供更快的
执行过程。业务在
7环境运营时,为了提升请求的性能,在
7环境中配置
扩展。业务在更新
后,访问业务系统时提示无法找到对应的文件或请求的内容还是更新前的旧内容,webserver重启以后,请求访问到的文件就都是最新的了,
就貌似解决了。
分析根据现象分析,
更新后请求找不...
设置
morishima的博客
03-05
907
前言
7.4 版本中有
设置,在项目开发的过程中会影响
调试。
.enable 启用操作码
,默认为“1”
如果禁用此选项,则不会优化和
。 在运行期使用 ini_set() 函数只能禁用
.enable 设置,不可以启用此设置。 如果在脚本中尝试启用此设置项会产生警告。
.enable_cli
仅针对 CLI 版本的
启用操作码
通常被用来测试和调试。
.revalidate_freq=0
检查脚本时
【惊喜福利】Docker容器化部署nextcloud网盘,享受高速稳定的文件共享体验!
Linux基础知识、计算机网络基础学习分享。
12-01
355
NextCloud的客户端覆盖了各种平台,包括Windows、Mac、Android、iOS、Linux等,也提供了网页端以及WebDAV接口,支持文件共享、权限控制、在线编辑、文件版本控制等功能,同时还有许多插件可以扩展其功能。安装完成后也是使用nextcloud插件形式连接ClamAV。最终实现在线网盘,集成mysql、redis、在线文档编辑、杀毒功能,但是的确稍微复杂,过程中也出现很多
,最新的其实已经可以使用docker-compose部署了,还没整理出来,以后再试下一键部署吧,大概思路如上。
-fpm软件的安装+openresty高速
搭建
b_______的博客
06-23
914
官网地址
2.安装并解决依赖性
3.
-fpm的启用
三、
-fpm和nginx的结合方式
四、
-fpm+nginx+memc
高效
策略
1.编译安装memc
memc
官网
2.开启使用
Openresty官方站点
2.
的搭建
lua-nginx-module
加速
,apc,xc
,eAccelerator原理与配置方法实例分析
10-15
主要介绍了
,eAccelerator原理与配置方法,结合实例形式分析了
,eAccelerator的基本功能、原理及扩展配置相关操作技巧,需要的朋友可以参考下
加速的使用方法
10-18
本篇文章主要介绍了
加速的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
安装和配置方法介绍
10-24
安装和配置方法介绍,
的安装需要在编译时加上enable-
即可,本文着重讲解配置方法,需要的朋友可以参考下
nginx
fpm c
,nginx+
-fpm配置使用fastcgi模块和facgi_c
weixin_31437175的博客
03-20
192
ngx_http_fastcgi_modulefastcgi模块http://nginx.org/en/docs/http/ngx_http_fastcgi_module.htmlThe ngx_http_fastcgi_modulemodule allows passing requests to a FastCGI server.配置示例:location / {fastcgi_passl...
用于
的Artisan命令
08-07
7使用什么
weixin_31635881的博客
03-10
411
预编译的字节码。这比使用
为每个HTTP请求加载和解析每个脚本要快得多。该
必须足够大以存储应用程序的
脚本的已编译
,但又不能太大,以免使您无法将可用的RAM用于其他操作。配置参数说明zend_extension=
.so
.enable=1
//启用
.enable_c...
一行
获取
参数及30+参数解释
易查薪
05-17
497
懵懂听风雨
05-18
2737
一、
的原理
1、
是什么?
是一种通过将解析的
脚本预编译的字节码(Operate Code)存放在共享内存中来避免每次加载和解析
脚本的开销,解析器可以直接从共享内存读取已经
的字节码(Operate Code),从而大大提高
的执行效率。
2、什么是Operate Code?
当解释器完成对脚本
的分析后,便将它们生成可以直接运行的中间
,也称为操作码(Operate Code,
ode)。
ode c
的目地是避免重复编译,减少C
如何正确使用
优化系统性能
7small7
09-25
2449
专注于
、MySQL、Linux和前端开发,感兴趣的感谢点个关注哟!!!文章整理在GitHub,主要包含的技术有
、Redis、MySQL、JavaScript、HTML&CSS、Linux、Java、Golang、Linux和工具资源等相关理论知识、面试题和实战内容。
文章说明
一直知道
可以提高
性能,但没有具体的关注,更多的利用其他的组件来提升系统的性能。一次无意开启了
之后,并随意设置了一些配置。结果导致后面在使用一个项目时,发现项目总是不会读取到最新.
导致的
Make
1085
自从开启了
以来,开发的时候一直存在一些
后来又开启了redis及其他的,开始没在意,每次修改文件刷新半天,界面都没变化
等10-60s左右刷新才能正常显示最新修改。
今天把文件修改了更新到服务器才发现,服务器上的页面实时更新变化,
一顿猛操作排查,才发现是
导致的。
.validate_timestamps=60
如果启用,那么
会每隔
.revalidate_freq 设定的秒数 检查脚本是否更新。
如果禁用此选
如何
怎么清除
weixin_29823011的博客
317
清除
的方法:1、开发环境中修改
.ini文件,将“
.revalidate_freq”的值改为1;2、在线上环境中,可以在
文件中执行“
_reset();”
,重启web服务器。本教程操作环境:windows7系统、
7.1版,DELL G3电脑1、
.ini默认配置
.validate_timestamps=1
...
的方法
热门推荐
mengzuchao的专栏
08-17
1万+
1.
     
.validate_timestamps=1  
.revalidate_freq=2  //默认每隔2s会验证改变的文件并会更新
 
2. 应用情况
        线上环境调试时,如果
更新了,不能即时生效,需要等
更新后才会生效,不方便调试
3. 解决办法
       开发环境:
    ...
开发工程师系统性教学】——Laravel框架(验证码)的配置和使用的保姆式教程
最新发布
php优质创造者
04-21
1594
👨‍💻。
wamp开启
7的
,在wamp中启用
06-06
要在WAMP中启用
,请按照以下步骤进行操作:
1. 在WAMP控制面板中,找到
版本并点击它。
2. 在弹出的菜单中,选择“
扩展”。
3. 在扩展列表中,查找“
”并勾选它。
4. 保存更改并重启Ap
服务器。
现在,
已经启用并且可以提高
脚本的性能。您可以通过在
脚本中添加以下
来验证
是否正在运行:
```
<?
info();
?>
info()输出的信息中,您应该看到有一个“
”部分,其中包含有关
的详细信息。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄8年
暂无认证
154
原创
周排名
92万+
总排名
122万+
访问
等级
7264
积分
5754
粉丝
236
获赞
16
1184
私信
热门文章
mybatis入门篇(一):通过SqlSession.selectList进行数据查询
21052
Mysql 中 JSON_CONTAINS、JSON_ARRAY 的使用
12966
Hyper-V无法使用鼠标的解决办法
10122
华为路由器环回接口配置
9972
CS域、PS域和IMS解释
9090
最新评论
js记录密码出错次数并锁定账号30分钟
桃生若白:
你好,咱这个还有其他代码吗
C语言: 两个int变量相除,结果保留两位小数
风静听溪流:
输出应该是共m列吧
CVPR论文 | 基于尺度空间变换的本征图像分解
Breezewind_996:
论文的题目是什么?
当电桥为恒流源时惠斯通电桥电压的计算方法
qq_20086461:
链接消失了可惜啊正需要呢
linux脚本实现scp命令自动输入密码和yes/no等确认信息
hikarilee:
挺好的,很实用
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
matlab练习程序(Sepia Tone滤镜)
从http://blog.csdn.net/happyhippy迁过来了:)
angularJS1笔记-(1)-多控制器
2019年
363篇
2018年
693篇
2017年
938篇
2016年
542篇
2015年
374篇
2014年
351篇
2013年
314篇
2012年
251篇
2011年
196篇
2010年
153篇
2009年
120篇
2008年
95篇
2007年
63篇
2006年
32篇
2005年
18篇
2004年
6篇
2001年
1篇
目录
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值