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

Posted

技术标签:

【中文标题】节点服务器上的间歇性 EAI_AGAIN 错误【英文标题】:Intermitent EAI_AGAIN error on node server 【发布时间】:2019-11-22 06:30:49 【问题描述】:

我的 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 容器。如果这有什么关系。

【问题讨论】:

可能重复https://***.com/questions/40182121/error-getaddrinfo-eai-again @SumanKundu 在您所指的问题中,EAI_AGAIN 问题似乎持续存在。我的问题是随机出现此错误。 【参考方案1】:

背景

实际上,错误来自getaddrinfo 系统调用。这会触发操作系统在 99% 的情况下执行 DNS 查询。查看the man page 的getaddrinfo,我们看到以下有关EAI_AGAIN 错误的信息:

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

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

问题

    错误取决于 DNS 服务器的状态,从您的角度来看,这可能是不确定的,但可能与请求率相关。您可以查看当您有另一个程序(参见 #4)攻击 DNS 服务器时,错误是否更频繁地出现。 见 #1 是的,见 #1 使用以下步骤对您的DNS server 进行负载测试,然后运行您的程序,看看它是否更频繁地发生。

【讨论】:

以上是关于节点服务器上的间歇性 EAI_AGAIN 错误的主要内容,如果未能解决你的问题,请参考以下文章

间歇性无法连接到 AWS RDS 上的 mysql(错误 2003)

使用 web3.py 查询远程以太坊节点时出现间歇性“读取超时”错误

间歇性 ORA-22288 错误 - 命令长度不正确

ZombieJS:从 for 循环重复调用时间歇性崩溃

设置上的 Varnish 错误 503

如果 Facebook Messenger 平台上发生 EAI_AGAIN 错误,我该如何解决?