在lambda JVM上使用aws sdk插入TimeStream失败-在从AWS检索必需的端点时失败。

0

【以下的问题经过翻译处理】 我们有一个用于将记录插入TimeStream DB的Kotlin(JVM)lambda。两者都位于同一地区。

我们正在使用版本2.17.100或aws sdk。

当工作繁忙时,它经常会出现EndpointDiscoveryFailedException(基于堆栈跟踪中的文件名)异常,消息为“检索AWS所需端点失败”,异常原因中的消息为“无法创建新的本机线程”。该异常由software.amazon.awssdk.core.endpointdiscovery.EndpointDiscoveryFailedException$BuilderImpl引发。

我搜索并找到一些与异常由于Lambda限制有关的参考资料,尽管这似乎很奇怪,因为存在请求速率低于每秒一个请求的实例(比我对Lambda限制的预期要低得多)。

此外,它始终发生在Endpoint Discovery尝试调用TimeStream时,这使我认为这是TimeStream问题而不是Lambda限制。

我还发现了一个针对CRUD APIS的timestream配额为每个地区每秒钟一个的参考。这似乎是一个可能的原因,但异常消息很奇怪,而且我已看到该系统处理多于每秒一个请求的情况。

有人看到过这种情况吗?他们有解释吗?

谢谢。

profile picture
专家
已提问 8 个月前16 查看次数
1 回答
0

【以下的回答经过翻译处理】 我找到了问题的原因——这是一种资源/线程饥饿的问题。

Lambda运行时被重复使用于多个请求。

Lambda为每个请求创建了一个新的TimeStreamWriteClient。

TimeStreamWriteClient实现了Closable(或AutoClosable),需要关闭掉多个打开的实例,以释放资源。

我没有关闭客户端。在每个请求之后关闭客户端,这里使用了Kotlin的use语句(大致相当于Java的try-with-resources)-似乎解决了这个问题。

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则