title: GOLANG, HTTP having "use of closed network connection" error
body: <p>I am getting a lot of error like below mentioned, </p>
  
  <p>read tcp xx.xx.xx.xx:80: <strong>use of closed network connection</strong></p>
  
  <p>read tcp xx.xx.xx.xx:80: <strong>connection reset by peer</strong></p>
  
  <p>//function for HTTP connection</p>
  
  <pre><code>func GetResponseBytesByURL_raw(restUrl, connectionTimeOutStr, readTimeOutStr string) ([]byte, error) {
      connectionTimeOut, _ /*err*/ := time.ParseDuration(connectionTimeOutStr)
      readTimeOut, _ /*err*/ := time.ParseDuration(readTimeOutStr)
      timeout := connectionTimeOut + readTimeOut // time.Duration((strconv.Atoi(connectionTimeOutStr) + strconv.Atoi(readTimeOutStr)))
      //timeout = 200 * time.Millisecond
      client := http.Client{
          Timeout: timeout,
      }
      resp, err := client.Get(restUrl)
      if nil != err {
          logger.SetLog("Error GetResponseBytesByURL_raw |err: ", logs.LevelError, err)
          return make([]byte, 0), err
      }
      defer resp.Body.Close()
      body, err := ioutil.ReadAll(resp.Body)
      return body, err
  }
  </code></pre>
  
  <p>Update (July 14):</p>
  
  <p>Server : NumCPU=8, RAM=24GB, GO=go1.4.2.linux-amd64</p>
  
  <p>I am getting such error during some high traffic.
  <strong>20000-30000 request per minutes</strong>, and I have a <strong>time frame of 500ms to fetch response from third party api.</strong> </p>
  
  <p><strong>netstat status</strong> from my server (using : netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n) to get frequency</p>
  
  <pre><code>      1 established)
        1 Foreign
        9 LISTEN
       33 FIN_WAIT1
      338 ESTABLISHED
     5530 SYN_SENT
    32202 TIME_WAIT
  </code></pre>
  
  <p><strong>sysctl -p</strong></p>
  
  <pre><code>**sysctl -p**
  fs.file-max = 2097152
  vm.swappiness = 10
  vm.dirty_ratio = 60
  vm.dirty_background_ratio = 2
  net.ipv4.tcp_synack_retries = 2
  net.ipv4.ip_local_port_range = 2000 65535
  net.ipv4.tcp_rfc1337 = 1
  net.ipv4.tcp_fin_timeout = 5
  net.ipv4.tcp_keepalive_time = 300
  net.ipv4.tcp_keepalive_probes = 5
  net.ipv4.tcp_keepalive_intvl = 15
  net.core.rmem_default = 31457280
  net.core.rmem_max = 12582912
  net.core.wmem_default = 31457280
  net.core.wmem_max = 12582912
  net.core.somaxconn = 65536
  net.core.netdev_max_backlog = 65536
  net.core.optmem_max = 25165824
  net.ipv4.tcp_mem = 65536 131072 262144
  net.ipv4.udp_mem = 65536 131072 262144
  net.ipv4.tcp_rmem = 8192 87380 16777216
  net.ipv4.udp_rmem_min = 16384
  net.ipv4.tcp_wmem = 8192 65536 16777216
  net.ipv4.udp_wmem_min = 16384
  net.ipv4.tcp_max_tw_buckets = 1440000
  net.ipv4.tcp_tw_recycle = 0
  net.ipv4.tcp_tw_reuse = 1
  net.ipv6.bindv6only = 1
  net.ipv4.conf.all.rp_filter = 1
  net.ipv4.conf.all.accept_source_route = 0
  net.ipv4.icmp_echo_ignore_broadcasts = 1
  error: "net.ipv4.icmp_ignore_bogus_error_messages" is an unknown key
  kernel.exec-shield = 1
  kernel.randomize_va_space = 1
  net.ipv4.conf.all.log_martians = 1
  net.ipv4.conf.default.log_martians = 1
  net.ipv4.icmp_ignore_bogus_error_responses = 1
  net.ipv4.ip_forward = 0
  net.ipv4.conf.all.send_redirects = 0
  net.ipv4.conf.default.send_redirects = 0
  net.ipv4.conf.all.secure_redirects = 0
  net.ipv4.conf.default.secure_redirects = 0
  </code></pre>