GatewayWorker分布式部署时的Gateway连接失败解决办法

问题场景:
分布式部署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的代码,使用长连接解决了问题
 
[img]https://wenda.workerman.net/uploads/article/20190516/90x90_a9fb60bce3674f09d626dfd8ea180b04.png[/img]
启动文件中增加如下代码
[code]Lib\Gateway::$persistentConnection = true;[/code]

TIM截图20190516095719.png

0 个评论

要回复文章请先登录注册