【问题标题】:Long cold start on AWS Lambda python functionAWS Lambda python函数长时间冷启动
【发布时间】:2020-05-18 18:22:24
【问题描述】:

我已经使用 Zappa 将一个非常简单的烧瓶函数(即两个简单的路由链接到一个 sql 查询并将它们转换为一个表)转换为一个 Lambda 函数。部署的功能约为 20MB。因为流量会非常低,所以我没有为我的函数使用任何预热机制。

该函数只需要 128MB 内存,当所有之前的实例都被销毁时,使用它运行时,冷启动大约需要 16 秒。

从直觉上看,这似乎很长一段时间,而我读过的内容(例如here)表明,VPC 中的 python 函数 not 冷启动的延迟相对较低。

如果我向函数添加内存,冷启动时间似乎会线性减少。这再次与我读过的内容(例如上面的here)相冲突,因为内存不是冷启动延迟的问题。这是我的调用时间表:

我应该对这些结果感到惊讶还是我错过了什么?

谢谢

斯蒂芬

【问题讨论】:

  • 当你说部署的函数是20MB时,你是指在内存中还是在磁盘上?
  • 在磁盘上。我认为它使用了大约 112mb 的内存。

标签: python flask aws-lambda zappa cold-start


【解决方案1】:

我并不(如此)惊讶。请记住,在 1GB 的 RAM 下,CPU 是单核的,并且 CPU 会随着内存线性增长。

尝试this tool 微调您的 Lambda 内存/功率和成本。如果您不想提高记忆力,请尝试使用Provisioned Concurrency 来减少冷启动。

PS:你确定那段时间是因为冷启动吗?

【讨论】:

  • 是的,warm 函数需要
  • 您确定这些是 lambda 冷启动而不是数据库连接问题吗?您是否尝试过使用 AWS X-Ray 等工具来追踪大部分时间都花在了哪些地方?
【解决方案2】:

在调用处理函数之前,底层 CPU 不会受到限制(请参阅 this re:invent video)。由于随着内存的增加计费持续时间会减少,因此有消息告诉我,您可能已经在处理程序中编写了函数定义,根据分配给函数的内存自然会对其进行限制,从而花费更长的时间。

尝试描述处理程序之外的所有函数、静态变量,并尽量减少处理程序代码。这将确保 Lambda 在调用受限制的处理程序函数之前,花费更多时间在具有完整 CPU 容量的处理程序之外。

了解更多信息的最佳方法是使用X-Ray segments 分析您的函数代码,以查看函数在哪里花费更多时间。如果这些确实是冷启动,或者只是运行时间更长,这将描绘出更清晰的画面。

注意:冷启动持续时间不计入您的函数持续时间指标,而是在您启用 X 射线跟踪时显示为“初始化持续时间”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 2020-02-13
    • 2021-11-06
    • 2022-10-04
    • 1970-01-01
    • 2019-11-21
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多