您好我有一个简单的服务器设置,间歇性地出错,出现以下错误。
- 拨tcp地址:port:i / o timeout
- 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
}
索引函数基本上接受请求并添加到缓冲通道并立即返回。该通道具有100000个突发负载条目的容量。即使在突发负载的峰值时间内,通道也不会超过500个条目。在通道的另一侧是20名工作人员,他们在将处理过的数据添加到数据库之前对数据进行额外处理。
现在奇怪的问题是我偶尔会得到上面列出的3个错误。服务器进程在高峰时间每秒获得大约30k个请求。上面列出的三个错误每分钟发生2-3次,在绝大多数情况下,它的拨号tcp地址:端口:i / o超时问题。有谁碰巧知道我在这里做错了什么?
编辑: 该服务器上的一些统计信息
ss -s总计:648(内核0)TCP:547(确定528,关闭1,孤立 4,synrecv 0,timewait 0/0),端口0
传输总IP IPv6 * 0 - - RAW 0 0 0 UDP 12 9 3 TCP 546 31 515 INET 558 40
518 FRAG 0 0 0netstat -ant | awk'{print $ 6}'|排序| uniq -c |排序-n 1成立) 1外国人 4 LAST_ACK 14听 24 TIME_WAIT 234 SYN_RECV