摘要:我們以為是服務(wù)器有緩存,就嘗試修改里面的代碼,和里面的代碼,但是發(fā)現(xiàn)并沒有用,程序依然運(yùn)行的是的代碼。建議大家在使用的時(shí)候,發(fā)布完新代碼,記得調(diào)用函數(shù)來清除緩存。該函數(shù)將重置整個(gè)字節(jié)碼緩存。
故事背景
公司服務(wù)器用的是Nginx,比如A項(xiàng)目的root目錄是a,a目錄軟鏈到a1。
發(fā)布新版本代碼后,會生成和a1同級的a2,a1和a2分別代表不通的發(fā)布版本,只需要將a目錄的軟鏈指到a2即可。
但是我們發(fā)現(xiàn)一個(gè)很奇怪的問題:
在訪問A項(xiàng)目的時(shí)候,運(yùn)行的還是a1的代碼運(yùn)行結(jié)果,理論上此時(shí)應(yīng)該執(zhí)行的是a2代碼才對。
我們以為是Nginx服務(wù)器有緩存,就嘗試修改a1里面的代碼,和a2里面的代碼,但是發(fā)現(xiàn)并沒有用,程序依然運(yùn)行的是a1的代碼。
我們甚至把a1目錄刪了,報(bào)錯(cuò)內(nèi)容都還是a1目錄里的某部分代碼。
經(jīng)過多方面的嘗試,我們最終將問題定位到OPcache上,在關(guān)閉了Opcache后,我們發(fā)布了a3,運(yùn)行結(jié)果顯示的也是a3的程序結(jié)果,證明我們的推斷是正確的。
總結(jié)nginx應(yīng)該是把目錄a作為路徑傳遞到了php-fpm中
而OPcache也是以路徑作為緩存代碼的Key
所以說雖然軟連接指向的目錄改變了,但是OPcache識別到的目錄是一樣的,所以使用了直接緩存的文件。
建議大家在使用OPcache的時(shí)候,發(fā)布完新代碼,記得調(diào)用函數(shù)opcache_reset()來清除緩存。該函數(shù)將重置整個(gè)字節(jié)碼緩存。 在調(diào)用opcache_reset()之后,所有的腳本將會重新載入并且在下次被點(diǎn)擊的時(shí)候重新解析。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30403.html
摘要:使用開發(fā)已經(jīng)很久了,但是最近看過一些代碼,卻發(fā)現(xiàn)自己竟然不知道為什么運(yùn)行結(jié)果會是那個(gè)樣子,特收集記錄之,代碼運(yùn)行結(jié)果大家請自行嘗試,我會不斷更新此文,弄明白為什么會是那個(gè)結(jié)果后,會更新原因,也希望看到的朋友能分享出來。 使用PHP開發(fā)已經(jīng)很久了,但是最近看過一些代碼,卻發(fā)現(xiàn)自己竟然不知道為什么運(yùn)行結(jié)果會是那個(gè)樣子,特收集記錄之,代碼運(yùn)行結(jié)果大家請自行嘗試,我會不斷更新此文,弄明白為什么...
閱讀 917·2021-09-29 09:35
閱讀 1261·2021-09-28 09:36
閱讀 1532·2021-09-24 10:38
閱讀 1079·2021-09-10 11:18
閱讀 640·2019-08-30 15:54
閱讀 2508·2019-08-30 13:22
閱讀 1973·2019-08-30 11:14
閱讀 708·2019-08-29 12:35