国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

PHP疑似內(nèi)存泄漏問題

z54123321

現(xiàn)在線上是用的Gateway,分布式架構(gòu),Register,Connect,Worker都分開容器部署,現(xiàn)在有個(gè)很奇怪的現(xiàn)象,關(guān)于worker進(jìn)程的容器主機(jī)內(nèi)存會一直持續(xù)增長,連續(xù)跑3天 內(nèi)存使用多占了2個(gè)G,但是系統(tǒng)監(jiān)控和atop查看到 整個(gè)php的worker進(jìn)程一直都是在 300-400M左右,總之都不會超過1G,但是我一旦重啟worker進(jìn)程之后立馬可用內(nèi)存多出來2個(gè)G。。。。。,完全找不到頭緒,進(jìn)程內(nèi)存占用比較少,沒有看到明顯增長,但是一旦重啟進(jìn)程缺能釋放很多內(nèi)存空間出來

求大佬分析一下可能的原因

3878 2 0
2個(gè)回答

phpcreeper

walkor大大關(guān)于內(nèi)存泄漏的可能原因?qū)懙暮茉敿?xì),據(jù)此自查:
https://wenda.workerman.net/question/3307

  • z54123321 2020-03-20

    是這樣的,我進(jìn)程里面確實(shí)有一些靜態(tài)數(shù)組數(shù)據(jù),但是監(jiān)控顯示所有的PHP進(jìn)程累計(jì)到400多M的的時(shí)候不再增加了,也趨于相對穩(wěn)定,但是宿主機(jī)內(nèi)存一直在緩慢增加,當(dāng)我重啟或者關(guān)閉PHP進(jìn)程容器的時(shí)候,立馬會騰出2個(gè)G,我所有PHP進(jìn)程加起來也沒2個(gè)G內(nèi)存占用啊

  • marsColin 2020-03-20

    看一下你的業(yè)務(wù)代碼,這么多內(nèi)存肯定是業(yè)務(wù)代碼有問題

  • phpcreeper 2020-03-20

    @3938:
    1、既然有靜態(tài)數(shù)組,那么要注意必要條件下的及時(shí)釋放,否則就會有內(nèi)存泄漏,所以你這情況十有八九就是這個(gè)造成的,具體還得你自己排查確認(rèn);
    2、PHP進(jìn)程累計(jì)到400多M不再增加? 這個(gè)400是看的top的哪個(gè)指標(biāo)? 另外什么又是宿主機(jī)內(nèi)存?
    3、至于重啟進(jìn)程,那肯定會騰出空間,因?yàn)榕f的進(jìn)程已經(jīng)退出了,進(jìn)程所占用的內(nèi)存會得到釋放,這個(gè)不難理解。

  • z54123321 2020-03-23

    atop所有php進(jìn)程累計(jì)的RSIZE,我上面說 400M -> 2G 這個(gè)關(guān)鍵點(diǎn)是忽略了嗎?為什么所有PHP進(jìn)程總共統(tǒng)計(jì)400M ,釋放后會騰出2G?靜態(tài)數(shù)組是固定的SET,沒有累加操作,而且只有那么幾個(gè)點(diǎn),啟動時(shí) 每個(gè)BK進(jìn)程12M,最后會到20M,容器或虛擬機(jī)部署的主機(jī)就叫宿主機(jī)啊

  • phpcreeper 2020-03-23

    我疏忽了你提及的容器二字;根據(jù)php進(jìn)程報(bào)告截圖來看,只能看到負(fù)載略高,那應(yīng)該是Rabbit那幾個(gè)進(jìn)程wait造成的阻塞引起的,busy也能說明這一點(diǎn),不過看不出來是否這組進(jìn)程里有使用定時(shí)器,這個(gè)上面鏈接里也有詳細(xì)的注意事項(xiàng)說明;然后沒用過atop; 另外對于top或htop監(jiān)控參數(shù)而言,如果特定容器內(nèi)所有PHP進(jìn)程對應(yīng)的RES字段(應(yīng)該類似于atop的rsize吧)如果在足夠長的周期內(nèi)一直維持在300~400M左右,那理論上說明不存在內(nèi)存泄漏的問題;至于2G宿主機(jī)內(nèi)存的釋放是不是重啟worker進(jìn)程容器后就判定一定是worker進(jìn)程在吃內(nèi)存,這個(gè)難說需要你自己多個(gè)時(shí)間點(diǎn)檢測排查環(huán)境,畢竟中間有層容器,容器本身以及容器內(nèi)的其他服務(wù)進(jìn)程對資源的消耗情況也不可忽略;建議你嘗試限制下worker進(jìn)程所在的docker容器內(nèi)存上限,然后這樣便于集中觀測是不是worker進(jìn)程在吃內(nèi)存,當(dāng)然了業(yè)務(wù)代碼層面還是需要再查查的,綜合排查吧。

z54123321


貼一張status,BK進(jìn)程是核心的業(yè)務(wù)進(jìn)程,里面就有我所說的靜態(tài)數(shù)組作為數(shù)據(jù)緩存點(diǎn),這些數(shù)組都是直接set不存在一直累加

剩下的rabbit那個(gè)是消息隊(duì)列處理一些異步任務(wù),內(nèi)部沒有靜態(tài)變量,阻塞的原因rabbit需要wait判斷新的消息

這樣的容器還有好幾個(gè),整體400M是包括了其他的這樣的worker業(yè)務(wù)容器還有connect容器

現(xiàn)在的問題是自己主機(jī)上查看或者云監(jiān)控上看著,這些容器內(nèi)存占用都比較穩(wěn)定,統(tǒng)計(jì)的結(jié)果加起來都不會超過500M(關(guān)注一下這里)

但是運(yùn)行幾天后整個(gè)主機(jī)的內(nèi)存一直在慢慢消耗,沒有釋放

一旦我去重啟這些worker進(jìn)程的容器或者說直接采用reload的方式去控制重啟進(jìn)程,都會釋放出大量的內(nèi)存(2G+)
400M->2G
這些內(nèi)存究竟是從哪來的?

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??