AWS Lambda中可用的最大虚拟处理器核心数是多少?

时间:2015-12-07 13:59:13

标签: amazon-web-services aws-lambda

我正在尝试查找AWS Lambda中可用的最大虚拟处理器核心数。官方文档暗示它会随着配置的内存量而扩展:

  

In the AWS Lambda resource model, you choose the amount of memory you want for your function, and are allocated proportional CPU power and other resources. For example, choosing 256MB of memory allocates approximately twice as much CPU power to your Lambda function as requesting 128MB of memory and half as much CPU power as choosing 512MB of memory.

但是,即使我配置了可请求的最大内存量,运行以下代码段也会获得Number of cores = 2:1536 MB。

package example;

import java.io.{ InputStream, OutputStream }

class Main {
  def main(input: InputStream, output: OutputStream): Unit = {   
    val result = "Number of cores = " + Runtime.getRuntime().availableProcessors()
    output.write(result.getBytes("UTF-8"))
  }
}

那么这里发生了什么?我是否使用了availableProcessors()错误或错误解释了其结果?或者是否有其他配置需要获得更多内核?

4 个答案:

答案 0 :(得分:22)

根据AWS Lambda documentationforum,AWS未说明AWS用于此服务的实例类型。在2014年底,AWS使用了 compute-optimize 类实例。现在,AWS使用通用类实例。

  

专用于函数的CPU份额基于分数   每个核心分配的内存。例如,一个   具有~3 GB内存的实例可用于lambda函数,其中每个都有   功能最多可以有1 GB内存,最多可以使用〜   1/3 * 2核心= CPU的2/3。细节可能会重新审视   未来,但这是我们使用模式的分数性质。

您只能使用与内存成比例的CPU功率。虽然,较低和较高的内存是在同一个实例中,它们将共享比例CPU功率,这是更高的内存将获得更多的CPU功率。如果您读取的总CPU核心数为2,则并不意味着您可以充分利用所有CPU。

目前,无法配置CPU。只有你可以调整的总内存。

答案 1 :(得分:14)

你提出了我认为错误的问题(或者想要将Lambda用于不适用于它的东西)。一个Lambda函数只有一个或两个核心可用,但Lambda的功能是你可以同时运行数百个核心。活动Lambda函数的默认限制为100,但这只是保护基础结构(和您的钱包)的限制。你可以要求更多。

因此,您的帐户可以同时运行100个Lambda函数,您可以将其视为100个核心(但它不是)。如果您要求增加限额,也可以是1000或10,000或100,000。

类比:你拥有100台1核计算机,而不是拥有1台100芯计算机。

答案 2 :(得分:10)

虽然AWS直到今天都没有透露有关AWS Lambda函数处理能力的任何细节,但他们现在在announcing an increase of the maximum memory from 1536 MB to 3008 MB之后做了。他们的documentation现在声明:

  

大于1536MB的函数被分配多个CPU线程,并且需要多线程或多进程代码来利用额外的性能。

基于此,我们可以得出结论,所有AWS Lambda功能高达1536 MB的内存都有一个可用的虚拟处理器内核,而具有更多内存的功能有两个内核可用。

<强>更新

虽然文档的这部分内容不再可用,但来自AWS的Chris Munns最近在2018-07-10的AWS无服务器启动日披露所有具有more than 1.8GB内存的AWS Lambda函数正在运行在多个核心上。显然,AWS Lambda功能的单核和多核之间的界限从1.5GB变为1.8GB。

答案 3 :(得分:4)