鍍金池/ 問答/PHP  C/ php守護進程一直在但是長時間運行后仍然會掛起不執(zhí)行?

php守護進程一直在但是長時間運行后仍然會掛起不執(zhí)行?

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

`script.php`:

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

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

使用的是`supervisor`的守護進程功能, 它確實可以保證進程在,并且保證進程退出后自動重啟。

出現(xiàn)問題:

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

請教:

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

資源長時間就被釋放這種說法,我是不認(rèn)同的。我一個項目用的是純PHP多進程守護處理任務(wù),跑了一年多都沒問題。

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

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

打印下日志,在sleep后面

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

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

2018年3月23日 00:50