鍍金池/ 問(wèn)答/PHP  C/ php守護(hù)進(jìn)程一直在但是長(zhǎng)時(shí)間運(yùn)行后仍然會(huì)掛起不執(zhí)行?

php守護(hù)進(jìn)程一直在但是長(zhǎng)時(shí)間運(yùn)行后仍然會(huì)掛起不執(zhí)行?

先上代碼:(沒(méi)用框架,全部原生)

`script.php`:

reqiure_once('path/to/HandleClass.php');
function run(){
    //省略取值邏輯。。。
    if(A==B) {
        // HandleClass里每次都會(huì)重新建立DB連接,并及時(shí)釋放
        new HandleClass();
    }
}

while(true){
    run();
    sleep(600);
}

使用的是`supervisor`的守護(hù)進(jìn)程功能, 它確實(shí)可以保證進(jìn)程在,并且保證進(jìn)程退出后自動(dòng)重啟。

出現(xiàn)問(wèn)題:

  • 腳本大概半個(gè)月、一個(gè)月左右就會(huì)出現(xiàn)進(jìn)程在, 卻不干事了。
  • 查資料說(shuō)可能是變量、 DB等資源長(zhǎng)時(shí)間就被釋放了,但我覺(jué)得sleep(600)之后,重新run(), 又是全新的一次執(zhí)行,并不存在因?yàn)楸会尫刨Y源導(dǎo)致的掛起(乃最大疑惑)。

請(qǐng)教:

  1. 以上進(jìn)程掛起到底可能是什么原因, 困擾很久了。。。
  2. 請(qǐng)只針對(duì)這種情況, 直接一句換crontab 等回答就免抬貴手了 :-)
回答
編輯回答
枕邊人

資源長(zhǎng)時(shí)間就被釋放這種說(shuō)法,我是不認(rèn)同的。我一個(gè)項(xiàng)目用的是純PHP多進(jìn)程守護(hù)處理任務(wù),跑了一年多都沒(méi)問(wèn)題。

僅從代碼上,尚未看出有什么問(wèn)題。是否可以多加些運(yùn)行日志,這樣有助于排查問(wèn)題?

2018年5月24日 20:54
編輯回答
款爺

打印下日志,在sleep后面

2017年4月23日 00:40
編輯回答
淺時(shí)光

進(jìn)程在不能代表什么。你可以在while的頭尾都加上寫(xiě)日志的操作,執(zhí)行就寫(xiě)日志到某個(gè)文件,內(nèi)容無(wú)外乎就是時(shí)間戳,以及當(dāng)前的內(nèi)存使用情況memory_get_usage(),以及執(zhí)行時(shí)長(zhǎng)等。記錄一段時(shí)間,直到出現(xiàn)你說(shuō)的情況的時(shí)候,去看下日志文件,做個(gè)對(duì)比,應(yīng)該就能發(fā)現(xiàn)蛛絲馬跡了。

2018年3月23日 00:50