有一次上线,运维部署代码后测试,发现没有新加的功能,访问的还是更新前的功能。
上服务器,查看有更新后的代码,
为保留上个版本的代码,采用的是每个版本一个文件夹,软链最新的版本为线上版本,
进入最新文件夹发现,没有产生任何日志,就推测访问的是上个版本的代码,
进入上个版本发现有访问日志,日志文件一般一天产生一次,新的明天才会在新版本产生。
找了很久没有找到原因,后来运维屏蔽了服务器访问,重启php-fpm后可以访问到新的代码
原因是opcache缓存,虽然软连接指向的目录改变了,但是opcache
识别到的目录是一样的,使用了直接缓存的文件,
所以访问的是旧版本。
可以修改php.ini里配置:
opcache.validate_timestamps=1
opcache.revalidate_freq=0
这样opcache就会每次都验证PHP文件的修改时间戳,如果PHP文件被修改过,opcache会重新缓存新的PHP文件opcode到内存.