golang 在 ubuntu 14.04 LTS 中获得大量读取 tcp ip:

我写了一个 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


慕标5832272
浏览 151回答 2
2回答

幕布斯6054654

为了更明确地说明 Not_a_Golfer 和 OneOfOne 所说的内容,当您完成响应后,您需要关闭一直打开的连接(通过 io.ReadCloser 的 Body 字段)。所以基本上,一个简单的方法是将与发出 http 请求相关的代码更改为:var resp *http.Responseif data.Redirect {&nbsp; &nbsp; c := &http.Client{&nbsp; &nbsp; &nbsp; &nbsp; Transport: t,&nbsp; &nbsp; }&nbsp; &nbsp; resp, err = c.Do(req)} else {&nbsp; &nbsp; resp, err = t.RoundTrip(req)}if err == nil {&nbsp; &nbsp; defer resp.Body.Close() // we need to close the connection}

守着一只汪

在没有看到 代码的情况下timeoutDial,我疯狂的猜测是您在完成连接后没有关闭连接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go