日志記錄出現(xiàn)錯(cuò)誤,線程全部死掉,是什么原因?
2016-07-26 18:53:33 process_timeout:
#1 /data/wwwroot/default/TrafficServer/Workerman/Events/Select.php(229): pcntl_signal_dispatch()
#2 /data/wwwroot/default/TrafficServer/Workerman/Worker.php(1493): Workerman\Events\Select->loop()
#3 /data/wwwroot/default/TrafficServer/GatewayWorker/BusinessWorker.php(145): Workerman\Worker->run()
#4 /data/wwwroot/default/TrafficServer/Workerman/Worker.php(886): GatewayWorker\BusinessWorker->run()
#5 /data/wwwroot/default/TrafficServer/Workerman/Worker.php(848): Workerman\Worker::forkOneWorker(Object(GatewayWorker\BusinessWorker))
#6 /data/wwwroot/default/TrafficServer/Workerman/Worker.php(368): Workerman\Worker::forkWorkers()
#7 /data/wwwroot/default/TrafficServer/start.php(33): Workerman\Worker::runAll()
#8 {main}
應(yīng)該是業(yè)務(wù)卡住了,比如讀數(shù)據(jù)庫長時(shí)間不返回等。
你可以通過strace定位下有問題時(shí)進(jìn)程卡在哪里
線程卡住后不會(huì)重啟線程?沒有這個(gè)理論。workerman里面沒有多線程,workerma是多進(jìn)程的。因?yàn)槟隳愕倪M(jìn)程卡住了,所以會(huì)影響后續(xù)請求的處理。但是這個(gè)不一定是你說的全線崩潰的原因。具體原因還得自己從業(yè)務(wù)上查
我也遇到這個(gè)情況 使用的是mycat中間件,卡在了讀取數(shù)據(jù),但中間件長時(shí)間不返回然后一直卡著,sql是很簡單的根據(jù)主鍵查詢一條數(shù)據(jù),問下walkor 可知道是中間件哪里的問題
異常是業(yè)務(wù)問題,看下workerman.log 是哪里的業(yè)務(wù)有異常,解決了就好了。
如果是超時(shí)問題導(dǎo)致的異常,并且你覺得你的業(yè)務(wù)執(zhí)行30秒以上沒問題,可以start_businessworker.php 加上類似的代碼 $business_worker->processTimeout=0;關(guān)閉這個(gè)超時(shí)檢測。
不過話說回來,如果每個(gè)請求都執(zhí)行超過30秒,如果瞬間有10000個(gè)請求發(fā)來,那么你的業(yè)務(wù)會(huì)運(yùn)行好幾天才能把這些請求運(yùn)行完畢,這幾天幾乎所有客戶端的訪問都無響應(yīng)。整個(gè)服務(wù)幾乎處于不可用狀態(tài)。所以不要逃避這個(gè)業(yè)務(wù)問題,業(yè)務(wù)上去解決才是最終解決方案。