我写了一个 golang 程序,过去几个月在 ubuntu 12.04 LTS 中运行良好,直到我将其升级到 14.04 LTS
我的程序专注于发送每秒发送大约 2-10 个 HTTP 请求的 HTTP 请求。HTTP 请求地址不同。
出现问题时,首先显示部分请求read tcp [ip]:[port]: i/o timeout,然后几分钟后显示所有请求read tcp [ip]:[port]: i/o timeout,无法发送任何请求。
我重新启动程序,一切又恢复正常。
从 12.04 升级到 14.04 后,我们所有的服务器(2 台服务器)都有这样的问题
我为每个请求创建新的 goroutine
问题不是在同一时间间隔出现,有时一两天不会出现,有时在一小时内出现两次
波纹管是我请求 HTTP 地址的代码:
t := &http.Transport{
Dial: timeoutDial(data.Timeout),
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
//req := s.ParseReq(data)
req := data.convert2Request()
if req == nil {
return
}
var resp *http.Response
if data.Redirect {
c := &http.Client{
Transport: t,
}
resp, err = c.Do(req)
} else {
resp, err = t.RoundTrip(req)
}
data.updateTry()
r := s.ParseResp(data, resp, err)
更新尝试:
func (d *SendData) updateTry() {
d.Try++
d.LastSend = time.Now()
}
超时拨号:
func timeoutDial(timeout int) func(netw, addr string) (net.Conn, error) {
if timeout <= 0 {
timeout = 10
}
return func(netw, addr string) (net.Conn, error) {
deadline := time.Now().Add(time.Duration(timeout) * time.Second)
c, err := net.DialTimeout(netw, addr, time.Second*time.Duration(timeout+5))
if err != nil {
return nil, err
}
c.SetDeadline(deadline)
return c, nil
}
}
看起来是这样,但我没有看到任何解决方案https://bugs.launchpad.net/juju-core/+bug/1307434
幕布斯6054654
守着一只汪
相关分类