Go client program generates a lot a sockets in TIME_WAIT state

后端 未结 1 1302
执念已碎
执念已碎 2020-11-30 04:32

I have a Go program that generates a lot of HTTP requests from multiple goroutines. after running for a while, the program spits out an error: connect: cannot assign reques

相关标签:
1条回答
  • 2020-11-30 05:10

    The default http.Transport is opening and closing connections too quickly. Since all connections are to the same host:port combination, you need to increase MaxIdleConnsPerHost to match your value for num_coroutines. Otherwise, the transport will frequently close the extra connections, only to have them reopened immediately.

    You can set this globally on the default transport:

    http.DefaultTransport.(*http.Transport).MaxIdleConnsPerHost = numCoroutines
    

    Or when creating your own transport

    t := &http.Transport{
        Proxy: http.ProxyFromEnvironment,
        DialContext: (&net.Dialer{
            Timeout:   30 * time.Second,
            KeepAlive: 30 * time.Second,
        }).DialContext,
        MaxIdleConnsPerHost:   numCoroutines,
        MaxIdleConns:          100,
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   10 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    }
    

    Similar question: Go http.Get, concurrency, and "Connection reset by peer"

    0 讨论(0)
提交回复
热议问题