0

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

该函数只需要 128MB 内存,在之前的所有实例都已销毁的情况下运行此函数时,冷启动大约需要 16 秒。

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

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

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

谢谢

斯蒂芬

4

2 回答 2

1

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

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

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

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

于 2020-02-03T18:25:49.150 回答
1

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

试试这个工具来微调你的 Lambda 内存/功率和成本。如果您不想增加内存,请尝试使用预置并发来减少冷启动。

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

于 2020-02-03T10:16:34.173 回答