我目前正在编写自己的HTTP代理。我有代码工作,但我试图用ApacheBench进行压力测试,发现我现在每隔一段时间就会收到一条消息,如下所示:getaddrinfo问题
“getaddrinfo:节点名或服务器名已提供,或者未知主机en.wikipedia。组织服务80“
我不能找出为什么这个函数调用会失败的主机名和端口传递。
我已经在网上寻找不同的方法来解决这个问题,并没有发现任何有用的东西。
有没有人有任何想法?
编辑 通过在我的应用程序中实现DNS缓存系统解决了此问题。
我目前正在编写自己的HTTP代理。我有代码工作,但我试图用ApacheBench进行压力测试,发现我现在每隔一段时间就会收到一条消息,如下所示:getaddrinfo问题
“getaddrinfo:节点名或服务器名已提供,或者未知主机en.wikipedia。组织服务80“
我不能找出为什么这个函数调用会失败的主机名和端口传递。
我已经在网上寻找不同的方法来解决这个问题,并没有发现任何有用的东西。
有没有人有任何想法?
编辑 通过在我的应用程序中实现DNS缓存系统解决了此问题。
也许你的分辨率堆栈中的某些东西不能处理你正在查询的数量?
您必须以开头,然后查看您的系统上的查询是如何解决的。在某些时候,你最终会到达你的本地DNS缓存,如果它一次查询太多,也可能会超时。
您可能会发现需要在代理(例如Squid)中运行DNS缓存,或者使用例如lwresd在本地运行DNS缓存。
我建议使用像C-ares这样的异步DNS解析库。否则,您会很快发现标准解决方案将如何杀死您的性能,因为它会阻止。
+1:超负荷DNS服务器或UDP堆栈是相当容易的。最重要的是,为了防止拒绝服务攻击,许多DNS服务器每个IP都有一个速率限制器,以便一个IP不会使系统过载。 –