有一张桌子说公司。如果我们尝试通过主键获取公司,我们会收到以下错误。 请注意:此错误并不适用于所有实例。并不是屡屡失败。它有时会发生,但经常发生。 20% 的请求失败
{ Error: getaddrinfo EMFILE dynamodb.eu-west-1.amazonaws.com:443
at Object._errnoException (util.js:1022:11)
at errnoException (dns.js:55:15)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
message: 'getaddrinfo EMFILE dynamodb.eu-west-1.amazonaws.com:443',
code: 'NetworkingError',
errno: 'EMFILE',
syscall: 'getaddrinfo',
hostname: 'dynamodb.eu-west-1.amazonaws.com',
host: 'dynamodb.eu-west-1.amazonaws.com',
port: 443,
region: 'eu-west-1',
retryable: true,
time: 2019-07-18T05:30:09.145Z }
对 aws/aws-sdk-js-v3 进行了讨论,问题为 #3019,建议降低套接字超时。
我使用代理时也出现过这样的情况
new https.Agent({
keepAlive: true,
maxSockets: Infinity,
}
然后我进一步查看了这里的文档 Reusing Connections with Keep-Alive in Node.js 我发现了一件有趣的事情
配置 SDK for JavaScript 以重用 TCP 连接的最简单方法是将
环境变量设置为AWS_NODEJS_CONNECTION_REUSE_ENABLED
。此功能已在 2.463.0 版本中添加。1
因此,我从 AWS DynamoDBClient 连接中删除了
httpsAgent
并添加了所需的环境变量 -
AWS_NODEJS_CONNECTION_REUSE_ENABLED: 1
错误已解决,一切按预期进行。
我希望有人会发现这个答案有帮助。
我的解决方案是仔细检查该区域。我的地区有 0。 解决方案使用:
region: 'eu-west-1',
而不是:
region: 'eu-west-01',