aceld / aceld/zinx

关于使用 SendBuffMsg以后,QPS下降明显,且有『僵死』连接的一些问题

Đang mở
#407 4 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Go
Star
7.8k
Fork
1.3k
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

问题一:
表现:现在服务器在有连接进来时,每个连接至少有两个协程。一个是connection.StartReader() 用来读数据,另一个是从 server.go ListenTcpConn函数里,开了一个协程来调用 StartConn(), StartConn 又调用了connection.go 的 Start(), 在 connection 的 Start里。会打开连接的读协程。这时这个协程并不会退出,而是一直等连接关闭,然后去做清理的工作。
connction 默认并不会开启Write协程,只有在每一次调用 SendBuffMsg/SendToQueue 时。才会开始写协程

现在的问题时。我在做压测时。10000连接,每个连接1000个请求与回复,如果服务器用 SendMsg,那一切正常。但如果我用 SendBuffMsg时。会发现QPS下降明显,而且经常会出现有几个连接不关闭,僵死。而且从服务器的协程数来看,用SendMsg 时,一个连接有两个协程,也是我前面提到的那两个。如果用SendBuffMsg时。一个连接就有3个协程。在我上面的说明里看,这也是正常。

想做的修改:
1. 因为server.go StartConn 的协程在开启connection 读协程以后,就一直等在那里等收尾工作,有点浪费。现在想去掉这个,开始读协程以后就直接退出。然后收尾工作由 connction 自己处理。想用 RunOnce的方式,直接在 Read协程里处理或用延时协程处理。
2. connection的写协程,现在有问题,不知道是不是和写超时有关,僵死的连接不知道是什么原因

测试代码在: https://github.com/redfox1999/znix_demo

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.