Peter Yang

Results 2 issues of Peter Yang

内网进行压力测试,winserver服务器,目前只压测一个协议,请求内容比较小,返回内容大,有1728字节,MSS是1460,当并发超过3500qps时,两个返回包1728就合并成一个tcp包了,客服户端也返回ack了,接着客户端也正常发送请求包,但服务端就一直没回复了。 cpu可以达到80%多,内存会一直增长,线程涨到1000左右。 ![微信图片_20210506143522](https://user-images.githubusercontent.com/19581439/117252292-56c52000-ae78-11eb-8411-a6f8a137f89d.png)

应用场景: 1.Linux操作系统 ,Almalinux,与redhat8相同 2.supersocket2.0.0-beta.28,websokcet server服务 3.连接超时需要断开连接,触发断开事件,做掉线业务处理。 问题: 1.通过看2.0源码发现是通过LastActiveTime来判断连接是否活跃的,但这里客户端发送消息与服务器发送消息都会重写该时间,所以当网络不好时(如关闭网络时),这时虽然客户端无法发送消息,但服务器不知道该连接断开,还是会不停给该连接发送消息(业务需要),这里LastActiveTime都是会不停刷新最新时间,没法断开。 2.自己写了一个超时业务判断 (心跳处理),只判断接收客户端发送消息的时间,也就是服务端接收到该连接发送的消息时间,如果大于超时限制时间时就手动断开连接,session.Connection.CloseAsync(CloseReason.TimeOut);,与ss2.0底层使用相同方法,这时虽然调用,但无法真正关闭,没触发OnSessionClosedAsync。其实这时服务端还是不停向该连接发送消息,不知是不是这里有判断 该连接pipe有消息,所以不会断开? 3.windows 平台不会出现该情况,在网络关闭后30s时间,服务端发送消息时会抛出异常,触发断开事件。 4.almalinux中,在网络关闭后15m的样子,也是发送消息会抛出异常,触发断开事件。 结果 : 1.希望close连接时,能立即触发断开事件,方便业务处理。根据自己超时判断业务, 2.能优化ss2.0底层库超时处理就更好

2.0