在AWS Lambda中,为Lambda分配的RAM是该Lambda的一个实例还是该Lambda的所有运行实例?直到现在我都相信每个实例。
让我们考虑一个lambda'testlambda',我将其配置为具有5分钟的超时时间和3008 MB(当前最大)RAM,并选择了“使用未保留的帐户并发性”选项:
在T处,一个“ testlambda”实例开始运行,并假设它将再运行100秒,并在运行时(整个100秒)使用100 MB RAM(如果再有一个实例) testlambda在T + 50时开始,第二个实例3008 MB或2908 MB将有多少可用RAM?
我曾经相信第二个实例也将具有3008 MB。但是在看到我的lambda的最近执行日志后,我倾向于说第二个实例将有2908 MB。
答案 0 :(得分:3)
分配是针对每个容器的。
在任何给定时间,容器都不能被多个调用使用-也就是说,容器被重用,但不能同时使用。 (并且不超过一个功能的一个版本)。
如果您的代码正在泄漏内存,这意味着在时间上相对靠近的后续但非并发的调用将被视为使用越来越多的内存,因为它们在同一容器中运行...但是这种情况永远不会发生您所描述的场景,因为在T + 50进行第二次调用时,它将永远不会与在T + 0开始的100秒进程共享容器。
答案 1 :(得分:1)
From what i saw, at least so far, the ram is not shared. We had a lot of concurrent requests with the default ram for lambdas, if for some reason this was shared we would see problems related to memory, but that never happened.
You could test this by reducing the amount of ram of a dummy lambda that would execute for X seconds and try to call it several times to see if the memory used is greater than the memory you selected.