第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

為什么 PHP unserialize 會有內(nèi)存泄露

為什么 PHP unserialize 會有內(nèi)存泄露

慕碼人8056858 2019-10-17 09:44:41
最近寫一個(gè)PHP服務(wù),PHP版本為swoolePHP環(huán)境二進(jìn)制版7.x,其中部分邏輯涉及到把PHP變量寫入到文件中,后續(xù)處理的時(shí)候讀出來,一開始使用serialize和unserialize實(shí)現(xiàn),但是運(yùn)行不久就直接超內(nèi)存了,最后發(fā)現(xiàn)是unserialize造成的內(nèi)存泄露例子:測試數(shù)據(jù):serialize序列化字符串[www@chengqmtest]$catserialize_stra:1:{s:4:"test";s:1024:"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";}測試數(shù)據(jù):json序列化字符串[www@chengqmtest]$catjson_str{"test":"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"}然后是PHP代碼,分別反序列化這兩個(gè)文件的內(nèi)容,前后輸出內(nèi)存使用情況
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

首先,倒數(shù)第四行$array=json_decode($serialize_str,True);似乎是寫錯(cuò)了,應(yīng)該是$array=json_decode($json_str,true);吧。。然后不知道樓主有沒有嘗試將json段放在文件前面,將serialize段放在文件后面,這樣去執(zhí)行的話你就會發(fā)現(xiàn)似乎是json段執(zhí)行之后有內(nèi)存沒有釋放了。。所以,這里其實(shí)不是unserialize造成的內(nèi)存泄漏。。這邊造成有一部分內(nèi)存被莫名吃掉應(yīng)該是file_get_contents造成的,樓主單獨(dú)運(yùn)行一次file_get_contents就可以驗(yàn)證一下了。。
最后說說樓主遇到的問題:在Linux中,頻繁地存取文件會產(chǎn)生大量的文件緩存,這是操作系統(tǒng)的機(jī)制,不是PHP的機(jī)制,樓主可查看下buff/cache的大小,內(nèi)存有可能都被cache吃掉了。PHP的GC機(jī)制中,自動回收的只有array和obj兩類,因?yàn)檫@兩類會產(chǎn)生循環(huán)引用,造成真正的內(nèi)存泄漏。而file_get_contents這種不完全歸還內(nèi)存的情況個(gè)人猜測(未驗(yàn)證,純屬猜測,輕噴)是內(nèi)存映射機(jī)制造成的小內(nèi)存碎片沒有回收。。
                            
查看完整回答
反對 回復(fù) 2019-10-17
?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

valgrind跑了下,應(yīng)該不算是內(nèi)存泄漏
跑這個(gè)也是兩次都不一樣,第三次就一樣了……
var_dump(memory_get_usage());
var_dump(memory_get_usage());
                            
查看完整回答
反對 回復(fù) 2019-10-17
  • 2 回答
  • 0 關(guān)注
  • 470 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號