我在lambda的AWS官方文档中发现了这一点:
如果Lambda函数访问VPC,则必须确保您的VPC具有足够的ENI容量以支持Lambda函数的扩展要求。您可以使用以下公式大致确定ENI要求。
预计的并发执行高峰*(以GB / 3GB的内存为单位)
我了解此公式背后的原因。我唯一的问题是:为什么要3GB?这个数字来自哪里?
答案 0 :(得分:4)
公式预计的峰值并发执行次数×(内存以GB / 3GB为单位)是实际(但没有发声)问题“多少个m类(通用)EC2实例”的答案的代理。 Lambda是否需要分配以容纳所需数量的这种大小的容器?”
AWS Lambda通过使用与通用Amazon EC2实例类型(例如M3类型)相同的比率来分配与内存成比例的CPU能力。
https://docs.aws.amazon.com/lambda/latest/dg/resource-model.html
比率是“相同的”,因为M3或与之非常相似的东西是Lambda在引擎盖下实际上用来存放容器的东西。
m3.medium是m3系列中最小的计算机,并具有3.75GB的RAM ...因此,lambda需要配置的此类EC2 VM的数量-因此,需要-大约为 n×(m / 3GB)。此实例可以托管(例如)大约2×1.5 GB或24×128 MB或1×3.0 GB的容器,从而为VM内的操作/管理开销留出一些空间。
可能涉及多少开销,Lambda在放置和选择容器时使用的算法,Lambda是否使用实例大小的混合以及在什么规则下……都是Lambda黑盒的一部分。逻辑将指示Lambda将以较小的实例开始,并随着并发性的增长而发展为较大的实例,因为较大的实例(在同一系列中)将允许更高的打包效率而不会造成性能损失(因为内存和CPU是专用的,且固定比例) ,到每个容器),特别是对于大型和奇特尺寸的容器。该公式表明,不是容器接收ENI,而是实例 ...,并且会有大约 n×(m / 3GB )由Lambda在大小为 m GB的并发 n 下分配的实例。
答案 1 :(得分:1)
3GB是单个lambda函数的最大内存分配。 https://docs.aws.amazon.com/lambda/latest/dg/limits.html