问题场景:
分布式部署gateway时,businessworker频繁从gateway查询数据(如 getSession, getOnlinexxx, getxxx),当用户量上升到一定程度会出现unable to connect to tcp://xxxx 或者 can not to conect to tcp://xxxx,导致用户请求未处理,如果未在外层捕获异常会导致businessworker进程重启
原因猜测:
getxxx在Lib/Gateway.php中都是用的短链接,每一次请求都会创建新的连接,两台服务器之间建立连接频率过快
解决办法:
起初发现netstats中存在几千个连接gateway内部端口的TIME_WAIT连接,就加大了TIME_WAIT最大容量,开启了tcp_tw_reuse,用户量上去后,TIME_WAIT不多了,但还是出现了上面的问题
最终通过修改Lib/Gateway.php的代码,使用长连接解决了问题
启动文件中增加如下代码
[code]Lib\Gateway::$persistentConnection = true;[/code]