我使用一个 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 }
经过我的一些小研究,我发现这个问题的出现可能是因为我尝试打开太多文件句柄或套接字,这只会在一段时间后才会真正发生。
但据我所知,node.js应该为我封装这个问题。换句话说,node.js应该了解文件描述符的限制,并根据这个限制打开一个新的文件描述符。这是使用基于事件的单用户线程的优势(我错了吗?)
如果node.js没有这样做,那么对于这个错误,什么是最好的解决方案,而不是增加我的打开文件限制(这是一个坏主意,因为我们需要这台机器上的良好性能。此外,如果我增加数量,如何确保这个错误不会再次出现?我怎么知道操作系统为此应该有多少个数?)
EMFILE
而不是ENOTFOUND
。ENOTFOUND
表示无法找到该主机名的主机。请检查您的 DNS 服务器是否可以通过在运行您的节点脚本的系统上的 shell 提示符中执行类似于ping XXXX.s3.amazonaws.com
的命令来解析该主机名。 - mscdex