我们正在使用负载均衡器和其他工具在生产中运行Core Go服务器。
现在,当goroutine计数(带有pprof跟踪)超过2500时,我们的HTTP客户端将返回nil作为结果。
这是我的HTTP客户端代码。
client := &http.Client{
Timeout: time.Second * 130,
Transport: netTransport,
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
},
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
go func() {
select {
case <-ctx.Done():
log.Error(ctx.Err()) // prints "context deadline exceeded"
return
}
}()
vars := mux.Vars(r)
validateTokenURL = authURL + "/" + vars["resource"] + "/authorized" + "?url=" + path
req, _ := http.NewRequest("GET", validateTokenURL, nil)
req.Header = r.Header
req = req.WithContext(ctx)
res, error := client.Do(req)
if error != nil {
log.Error("The group's number increased tremendously!")
return nil, nil, false
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Error(err.Error())
}
json.Unmarshal(body, &responseBody)
res.Body.Close()
if _, ok := responseBody["data"]; ok && strings.Compare(reflect.TypeOf(responseBody["data"]).String(), "string") == 0 && strings.Compare(responseBody["data"].(string), "ok") == 0 {
return responseBody, res, true
}
return responseBody, res, false
}
我将ulimit设置为大约8 GB,另外我们还有16 GB作为RAM。内存使用率不到20%。
有人可以帮助我们弄清楚我们所缺少的是什么吗?