AWS Lambda python函数的长期冷启动

时间:2020-02-02 23:54:07

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

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

该功能仅需要128MB内存,并且在销毁所有先前实例的情况下使用此内存运行时,冷启动大约需要16秒。

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

如果我在函数中添加内存,则冷启动时间似乎会线性减少。同样,这与我所阅读的内容(例如上文的here)存在冲突,因为内存不是冷启动延迟的问题。这是我的调用时间表: enter image description here

这些结果会让我感到惊讶还是我错过了什么?

谢谢

斯蒂芬

2 个答案:

答案 0 :(得分:1)

我并不感到惊讶。请记住,在1GB的RAM之下,CPU是单核,并且CPU与内存呈线性增长。

请尝试this tool来微调Lambda的内存/功耗和成本。如果您不想增加内存,请尝试使用Provisioned Concurrency来减少启动。

PS:您确定那些时间是因为冷启动吗?

答案 1 :(得分:1)

在调用处理程序函数之前,不会限制基础CPU(请参阅this re:invent video)。由于随着内存的增加计费的持续时间在减少,有人告诉我您可能在处理程序中编写了函数定义,根据分配给该函数的内存自然会限制该函数定义,从而花费更长的时间。

尝试描述处理程序外部的所有函数和静态变量,并尽量减少处理程序代码。这样可以确保Lambda在具有完全CPU容量的处理程序之外花费更多的时间,然后再在受到限制的处理程序函数上调用。

最好的方法是我使用X-Ray segments对函数代码进行概要分析,以了解函数在哪里花费了更多时间。如果确实是冷启动或只是需要更长的时间,这将使画面更清晰。

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

相关问题