gpt4 book ai didi

amazon-web-services - AWS Lambda 意外无限循环后的令人担忧的行为

转载 作者:行者123 更新时间:2023-12-02 09:07:29 25 4
gpt4 key购买 nike

我不小心将一些 Java 代码部署到 AWS Lambda 中,其中包含以下明显有错误的 getter:

public String getLocation() {
return this.getLocation();
}

Lambda 函数配置的限制为 15 秒和 320 个月。它由 DynamoDB 流触发。部署有问题的代码后,我在 22 点左右修改了 DynamoDB 表,从而执行了代码。我检查了日志,正如您从上一个函数中所期望的那样,我遇到了一个经典的 StackOverflowError ,并且堆栈跟踪非常长。然而,我惊讶地发现这并没有停止继续执行并报告更多堆栈溢出错误(CloudWatch 中的日志)的函数。当我意识到该功能即使在 15 秒限制之后也不会停止时,我更加担心了。我找不到任何方法来手动停止它,所以我只是在 22 点 30 分左右从 Lambda 控制台中删除了它,最终杀死了它。下图(来自 CloudWatch)显示了一段时间内的执行持续时间,您可以看到我在运行 bug 之前执行的多项测试(运行超过 10 秒),然后是 22 点 17 分到 22 点 30 分之间的连续快速运行(大约 200 毫秒)。

enter image description here

此外,我确信我没有触及我的 DynamoDB 表(并且没有其他人可以访问它),也没有尝试以任何其他方式执行 Lambda 函数。为什么它一直执行几分钟直到我删除它?我当然应该更加小心,首先进行一些本地预测试,但是持续时间限制不是应该保证一旦达到就不会执行任何操作吗?

感谢您的帮助。

最佳答案

我终于弄清楚了这种行为的根源。在 AWS Lambda official documentation据说:

Depending on the event source, AWS Lambda may retry the failed Lambda function. For example, if Amazon Kinesis is the event source for the Lambda function, AWS Lambda retries the failed function until the Lambda function succeeds or the records in the stream expire.

DynamoDB 流的过期延迟为 24 小时,因此我的函数到那时才会停止。

关于amazon-web-services - AWS Lambda 意外无限循环后的令人担忧的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com