节点服务器出现间歇性的EAI_AGAIN错误

7

我的Node.js应用连接到一个外部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容器。如果这有关联,请告诉我。


可能是重复问题 https://dev59.com/F1kS5IYBdhLWcg3wN0TA - Suman Kundu
@SumanKundu 在你所提到的问题中,EAI_AGAIN问题似乎是持续存在的。 我的问题是在随机时间出现这个错误。 - Sreeragh A R
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服务器进行负载测试,然后运行您的程序并查看错误是否更频繁出现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接