Go 拨号tcp地址:端口:i/o超时、EOF和对等方重置连接

Go 拨号tcp地址:端口:i/o超时、EOF和对等方重置连接,go,Go,您好,我有一个简单的服务器设置,它会间歇性地出现以下错误 拨号tcp地址:端口:i/o超时 EOF 对等方重置连接 客户端代码: request, err := http.NewRequest("POST", "http://someaddress/abc?key=somekey", bytes.NewReader(value)) if err != nil { return } request.Header.Set("Content-Type", "application/json

您好,我有一个简单的服务器设置,它会间歇性地出现以下错误

  • 拨号tcp地址:端口:i/o超时
  • EOF
  • 对等方重置连接
客户端代码:

request, err := http.NewRequest("POST", "http://someaddress/abc?key=somekey", bytes.NewReader(value))
if err != nil {
    return
}
request.Header.Set("Content-Type", "application/json")
request.Header.Set("Content-Length", strconv.Itoa(len(value)))
request.Header.Set("Connection", "Keep-Alive")

response, err := client.Do(request)
if response != nil {
    io.Copy(ioutil.Discard, response.Body)
    response.Body.Close()
}
服务器代码:

func HandleMe(response http.ResponseWriter, request *http.Request) {
    query := request.URL.Query()

    key := query.Get("key")
    if key == "" {
        response.Write(nil)
        return
    }

    body, err := ioutil.ReadAll(request.Body)
    if err != nil {
        response.Write(nil)
        return
    }

    index(key, string(body))
    response.Write(nil)
    return
}
index函数基本上接受请求并添加到缓冲通道中,然后立即返回。该通道具有100000条突发负载入口的容量。即使在突发负载的高峰时间,信道也不会有超过500个条目。通道的另一边是20名工人,他们在将处理后的数据添加到数据库之前对数据进行额外处理

现在奇怪的问题是,我偶尔会遇到上面列出的3个错误。服务器进程在高峰时间每秒收到大约30k个请求。上面列出的三个错误每分钟发生2-3次,在绝大多数情况下都是拨号tcp地址:端口:i/o超时问题。有人知道我做错了什么吗

编辑: 该服务器上的一些统计信息

ss-s总计:648(内核0)TCP:547(estab 528,关闭1,孤立 4,synrecv 0,timewait 0/0),端口0

传输总IP IPv6 *0--原始0 0 0 UDP 12 9 3 TCP 546 31 515 INET 558 40
518碎片0

netstat-ant | awk{print$6}| sort | uniq-c | sort-n 1(已设立) 1外国 4最后确认 14听 24小时等待 234 SYN_RECV


错误描述了发生的情况,拨号尝试连接到服务器时超时。你检查过服务器是否可以接受更多的连接吗?我更新了原始帖子,提供了更多关于连接使用的信息。我多次尝试ss,但总连接数不超过1.5k。SYN_RECV计数看起来很奇怪。要么是服务器无法跟上请求,要么是客户端无法完成TCP握手。我猜是前者,但我不排除客户端崩溃、网络问题等。顺便说一句,你应该检查
err!=nil
,而不是客户端中的响应。如果有错误,不能保证主体不是零。另外,不需要
响应。Write(nil)
@JimB谢谢您的输入。我确实检查了错误!=无,但我没有将其添加到snipper中,因为我想强调主体正在关闭以供客户端重用。它显然不像是服务器,因为资源没有最大化(服务器使用5-10%的CPU)。在我测试索引方面的测试中,我通常可以获得80-90%的CPU负载,而不会出现问题。我认为这可能是在客户端,所以我将尝试进行更多的调查。谢谢