4

我的 nodejs 应用程序连接到外部 url 并使用响应。该应用程序大部分时间都运行良好,但我偶尔会收到 EAI_AGAIN。

error:{code:EAI_AGAIN, errno:EAI_AGAIN,syscall:getaddrinfo,hostname:**.com,host:***.com,port:443}

我经历了一些与 EAI_AGAIN 相关的问题。没有解决我的目的。看到 DNS 名称解析失败时会发生此错误。

我的担忧是

1)当我检查日志时。在失败的请求之前有很多成功的请求,在失败的请求之后也有很多成功的请求。为什么只有一个请求就失败了?

2) 真正的原因可能是什么?我想知道所有的可能性。

3)原因可能是我们正在连接的外部服务的问题吗?

4)如果有人可以帮助重现这个问题,那就太好了。

注意:我们使用的是 docker 容器。如果这有什么关系。

4

1 回答 1

7

背景

在引擎盖下,错误来自getaddrinfo系统调用。这会触发操作系统在 99% 的情况下执行 DNS 查询。查看手册页getaddrinfo我们看到有关 EAI_AGAIN 错误的以下内容:

   EAI_AGAIN
          The name server returned a temporary failure indication.  Try
          again later.

这基本上告诉我们,当我们看到这个错误时,DNS 服务器(名称服务器)给了我们一个错误的响应。它可能会以某种方式负担,要么主动响应错误,要么根本不响应。

问题

  1. 该错误取决于 DNS 服务器的状态,从您的角度来看,这可能是不确定的,但可能与请求速率相关。当您有另一个程序(请参阅#4)猛击 DNS 服务器时,您可以查看该错误是否更频繁地出现。
  2. 见#1
  3. 是的,见#1
  4. 使用以下步骤对您的DNS 服务器进行负载测试,然后运行您的程序并查看它是否更频繁地发生。
于 2019-09-03T16:48:41.987 回答