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