【发布时间】:2014-12-07 05:51:10
【问题描述】:
我运行一个 node.js 客户端,它向我的服务器发送大量请求(也是用 node.js 编写的)。
服务器获取特定文件的请求,并将其上传到 S3。
两分钟后我收到以下错误,一切顺利:
{ [NetworkingError: getaddrinfo ENOTFOUND]
message: 'getaddrinfo ENOTFOUND',
code: 'NetworkingError',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
region: 'us-east-1',
hostname: 'XXXX.s3.amazonaws.com',
retryable: true,
time: Sun Oct 12 2014 11:27:54 GMT-0400 (EDT),
_willRetry: false }
我做了一个小研究后,发现它发生在probably because I'm trying to open too many file handles, or sockets, which can really only happen after a while.
但据我了解,node.js 应该为我封装这个问题。也就是说node.js应该理解文件描述符的限制,根据这个限制打开一个新的。这就是基于事件使用一个用户线程的好处(我错在哪里了?)
如果node.js不这样做,这个错误的最佳解决方案是什么,不是增加我的打开文件限制(这是一个坏主意,因为我们需要在这台机器上具有良好的性能。这个等等, 我如何确定如果我增加数字,这个错误不会再次出现?我怎么知道操作系统应该有这个应用程序的数字?)
【问题讨论】:
-
这不是因为您达到了打开文件描述符的限制。如果你是,你会看到
EMFILE,而不是ENOTFOUND。ENOTFOUND表示找不到该主机名的主机。检查您的 DNS 服务器是否可以从运行您的节点脚本的系统上的 shell 提示符中使用类似ping XXXX.s3.amazonaws.com的名称解析该主机名。 -
也许远程端点在之前的请求中崩溃了?也许一些监控系统会在一段时间后自动重新启动它......?您绝对应该挖掘您可用的任何服务器日志。
标签: linux node.js amazon-web-services amazon-s3