节点服务器上的间歇性 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)