linux - 查找 [主机] : no such host error in Go

标签 linux http networking concurrency go

我有这个测试程序可以并行获取 url,但是当我将并行数增加到大约 1040 时,我开始得到 lookup www.httpbin.org: no such host错误。

经过一些谷歌,我发现其他人说不关闭响应会导致问题,但我确实用 res.Body.Close() 关闭了它。 .

这里有什么问题?非常感谢。

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func get(url string) ([]byte, error) {

    client := &http.Client{}
    req, _ := http.NewRequest("GET", url, nil)

    res, err := client.Do(req)

    if err != nil {
        fmt.Println(err)
        return nil, err
    } 

    bytes, read_err := ioutil.ReadAll(res.Body)
    res.Body.Close()

    fmt.Println(bytes)

    return bytes, read_err
}

func main() {
    for i := 0; i < 1040; i++ {
        go get(fmt.Sprintf("http://www.httpbin.org/get?a=%d", i))
    }
}

最佳答案

从技术上讲,您的进程(受内核)限制为大约 1000 个打开的文件描述符。根据具体情况,您可能需要增加此数字。

在你的 shell 运行中(注意最后一行):

$ ulimit -a
-t: cpu time (seconds)         unlimited
-f: file size (blocks)         unlimited
-d: data seg size (kbytes)     unlimited
-s: stack size (kbytes)        8192
-c: core file size (blocks)    0
-v: address space (kb)         unlimited
-l: locked-in-memory size (kb) unlimited
-u: processes                  709
-n: file descriptors           2560

增加(暂时):

$ ulimit -n 5000
(no output)

然后验证fd限制:

$ ulimit -n
5000

关于linux - 查找 [主机] : no such host error in Go,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12952833/

相关文章:

php - 从 php 调用时,将 RPi.GPIO 导入为 GPIO 在 python 中不起作用

Python ping 脚本在第一次尝试时总是失败

Java 将数据从服务器发送回客户端

http - HTTP POST 可以无限吗?

networking - TCP连接建立中的两军问题

networking - 使用 gopacket 发送 UDP 数据包

linux - 关于 linux 和 ntpd 如何处理时间的困惑

http - 在 "Not Authenticated"和 "Not authorized"情况下使用什么 HTTP 代码?

networking - 将外部IP分配给Kubernetes服务

linux - 具有扩展 key 用法的证书仅适用于 Firefox