【问题标题】:Lambda timed out due to container refreshedLambda 因容器刷新而超时
【发布时间】:2019-10-16 09:07:03
【问题描述】:

我浏览了该网站,但无法找到问题的根本原因。

我们有一个每 50 秒运行一次的 lambda。 lambda 的第一次运行是冷启动。在启动期间,所有必要的 lambda 依赖项都已准备好(所有接口)。Lambda 处理程序将拥有自己的代码来与 SQS 和 SWF 交互。在云监视日志的第一次运行期间,很明显它正在读取基本文件以获取所有服务。然后 lambda 处理程序将启动。从第二次运行开始,只有 lambda 处理程序将在第 50 秒后被调用。到目前为止,一切都很顺利。 突然间,我们注意到 lambda 耗时超过 50 秒(通常在 10 秒以下完成)。日志显示 lambda 已超时,并重新开始重新初始化所有依赖项。

这并没有给我们任何线索,因为超时后后续运行会顺利进行。看到 lambda 超时并不好。绝对 lambda 代码没有错误。

这可能是任何容器问题吗?容器是否有任何时间段保持数据活动,直到达到过期超时。

我们能否访问容器对象以了解更多信息?我们有 2 个或更多开发环境。对于不同的环境,这种行为是不同的。对于某些人来说,它每 3 天发生一次。一天中的某个时候会发生三次。

如果我们想了解容器对象的属性,我们该怎么做呢?它是只有 AWS 可以访问的灰色区域吗? Lambda 代码是使用 net core App 2.0 用 c# 编写的。考虑在调用期间检查此 lambda 的云跟踪日志。我也无法找到超时背后的原因。

我们在每个不同地区都有 20 多个用于开发的 lambda 和 10 个用于测试的 lambda。我们不清楚哪个 lambda 会超时。

任何建议或想法都会对我有很大帮助??????

谢谢。

【问题讨论】:

    标签: amazon-web-services aws-lambda timeout containers refresh


    【解决方案1】:

    Lambda 容器不会无限期地存在。如果您偶尔看到“冷启动”,那么这是正常行为。如果您一次只运行 1 次调用(即您只有一个 lambda 实例),您仍然可以期望每隔几个小时看到一次容器回收。总的来说,我了解 AWS 正在努力减少冷启动,但您仍然可以期望不时获得新容器和新的冷启动。

    【讨论】:

    • 感谢 Macbutch 的回复。冷启动期间 lambda 会超时吗?我们添加了 catch 块,希望能在超时期间捕捉到任何期望。但它没有击中 catch 块。这个 lambda 有两个主要检查。一种用于访问 SSM 参数存储变量,另一种用于获取打开 SWF 工作流的数量。将请求限制这些服务可能会导致超时。
    • 我认为您通常可以期望一个容器可以使用几个小时。在调用期间容器不会被 AWS 杀死。由于您正在使用的 API(或其他任何东西)发生了一些变化,因此您可能会超时。你认为你做了足够多的请求来达到服务限制吗?您可以添加日志记录(或启用 X 射线)以准确查看花费的时间吗?如果您的 lambda 执行超时,您不能期望您的 catch/finally 子句执行,但您可以在找到源代码时延长配置的超时时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2020-07-28
    • 2019-03-11
    • 2015-02-07
    相关资源
    最近更新 更多