問(wèn)題場(chǎng)景:
分布式部署gateway時(shí),businessworker頻繁從gateway查詢(xún)數(shù)據(jù)(如 getSession, getOnlinexxx, getxxx),當(dāng)用戶量上升到一定程度會(huì)出現(xiàn)unable to connect to tcp://xxxx 或者 can not to conect to tcp://xxxx,導(dǎo)致用戶請(qǐng)求未處理,如果未在外層捕獲異常會(huì)導(dǎo)致businessworker進(jìn)程重啟
?
原因猜測(cè):
getxxx在Lib/Gateway.php中都是用的短鏈接,每一次請(qǐng)求都會(huì)創(chuàng)建新的連接,兩臺(tái)服務(wù)器之間建立連接頻率過(guò)快?
解決辦法:
起初發(fā)現(xiàn)netstats中存在幾千個(gè)連接gateway內(nèi)部端口的TIME_WAIT連接,就加大了TIME_WAIT最大容量,開(kāi)啟了tcp_tw_reuse,用戶量上去后,TIME_WAIT不多了,但還是出現(xiàn)了上面的問(wèn)題
最終通過(guò)修改Lib/Gateway.php的代碼,使用長(zhǎng)連接解決了問(wèn)題
?
啟動(dòng)文件中增加如下代碼
[code]Lib\Gateway::$persistentConnection = true;[/code]