golang 实现的 tcp 服务器 500 个左右并发就出现 connection reset by peer

2017-10-17 19:57:05 +08:00
 MungBeanSoup

使用 golang 实现的一个简单的 tcp 服务器,主要就是接收客户端连接然后做 rpc 转发 发现在 500 个连接开始就陆续出现 connection reset by peer,5000 个以上的时候甚至有 60%报错 服务端就启动在本地,由于没有头绪也不知道要给出什么参数 MacBook Pro (Retina, 13-inch, Early 2015) Golang 1.9 有高手指点迷津么

2853 次点击
所在节点    Go 编程语言
11 条回复
ChristopherWu
2017-10-17 20:05:49 +08:00
接收的服务器是怎么实现的? golang 的 rpc 有设置 req.Close 吗?
可能是服务器关闭了链接,但 golang 复用了之前的链接,所以提示 reset by peer
MungBeanSoup
2017-10-17 20:08:00 +08:00
@ChristopherWu
connection reset by peer 不是 rpc 调用的时候报的错,是我自己的 tcp 服务器 RST 了连接
sagaxu
2017-10-17 20:18:47 +08:00
Transport.MaxIdleConnsPerHost 设置了吗?
MungBeanSoup
2017-10-18 09:56:24 +08:00
@sagaxu tcp 服务器该怎么设置这个配置
sagaxu
2017-10-18 10:07:22 +08:00
@MungBeanSoup 那要看你的连接池是怎么写的了
90928yao
2017-10-18 10:42:30 +08:00
请复用,你看下端口 应该都是 close_wait
MungBeanSoup
2017-10-18 11:17:14 +08:00
@90928yao 请问 tcp 该如何复用连接
我搜索都是 http 复用的 tcp 连接
wcsjtu
2017-10-18 16:40:56 +08:00
@MungBeanSoup SO_REUSEADDR
petelin
2017-10-18 19:58:37 +08:00
@90928yao close_wait 是服务端没有主动调起 close 吧和复用有什么关系?
reus
2017-10-19 10:16:59 +08:00
……没代码有什么好说的。
MungBeanSoup
2017-10-19 14:54:15 +08:00
最后设置服务器的 somaxconn 和 backlog 让连接能上 W 了,接下来看看有没有别的能优化的地方

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398427

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX