【问题标题】:What's the maximum number of virtual processor cores available in AWS Lambda?AWS Lambda 中可用的最大虚拟处理器核心数是多少?
【发布时间】:2021-09-16 21:53:19
【问题描述】:

我正在尝试查找 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.

但是,即使我配置了可请求的最大内存量:1536 MB,运行以下 sn-p 也会让我得到 Number of cores = 2

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() 还是错误地误解了它的结果?或者是否有一些其他配置需要获得更多内核?

【问题讨论】:

  • 您也可能误解了常见问题...请记住,一切都是虚拟化的,“比例 CPU 功率”一词也可以指管理程序分配给作业的可用 CPU 周期的比例(如果您'被允许,例如 25%,管理程序将“窃取”其他 ~75%),而不是扩展核心数量。

标签: amazon-web-services aws-lambda


【解决方案1】:

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

专用于某个功能的 CPU 份额取决于 它分配的内存,每个两个内核。例如,一个 具有约 3 GB 内存的实例可用于 lambda 函数,其中每个 功能最多可以有 1 GB 内存意味着您最多可以使用〜 1/3 * 2 个核心 = 2/3 的 CPU。详情可在 未来,但这是我们使用模型的分数性质。

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

目前,没有办法配置 CPU。只有您可以调整的总内存。

【讨论】:

  • 你能分享一下你在哪里发现他们使用通用的 Lambda 实例吗?我根本找不到。
  • 只是为了澄清:you get 2 - 6 vCPUs,它等于您的逻辑核心(在代码中报告)。但是您是对的,它们的功能与您请求的内存成正比 - 因此您可以间接配置您的 CPU,这正是最佳实践。请注意,从 3009 MB RAM 开始,您的两个 vCPU 将停止垂直扩展,并且需要多进程代码才能继续扩展(水平)。目前,使用 2.50GHz 的 Intel(R) Xeon(R) 处理器,但配置发生了变化。
【解决方案2】:

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

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

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

更新:

虽然这部分文档不再可用,但来自 AWS 的 Chris Munns 最近在 2018 年 7 月 10 日的 AWS 无服务器启动日上透露,所有具有 more than 1.8GB 内存的 AWS Lambda 函数都在多个内核上运行。显然,AWS Lambda 函数的单核和多核之间的界限从 1.5GB 移动到了 1.8GB。

【讨论】:

  • “他们的文档现在声明:......”但它不再这样做了。
  • 文档中不再说明。我想知道它是否仍然是真的。
  • Afaik 仍然是真的。此外,1 月底的这些基准仍然表明它:engineering.opsgenie.com/… AWS 从文档中删除它真的很遗憾。
  • 自 2021 年 9 月 16 日起,该信息已被弃用 you will always get 2 < n < 6 cores。内存的配置范围从 128 MB 到 10 GB。此外,文档链接似乎又可以使用了。
【解决方案3】:

2021 年 9 月 16 日编辑

这个答案已经快 6 年了,不再真正相关了。请参阅 cmets,您现在可以根据您选择的 RAM 数量选择最多 6 个内核。

原答案

您在问我认为的错误问题(或者想将 Lambda 用于不适合它的东西)。一个 Lambda 函数只有一个或两个可用内核,但是 Lambda 的强大之处在于您可以同时运行数百个内核。活动 Lambda 函数数量的默认限制是 100,但这只是保护基础设施(和您的钱包)的限制。您可以要求更多。

因此,您的账户可以同时运行 100 个 Lambda 函数,您可以将其视为 100 个内核(但事实并非如此)。如果您请求增加限制,这也可能是 1000 或 10,000 或 100,000。

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

【讨论】:

  • 对于某些用例来说,这可能是一个完全有效的问题——例如,使用并行处理处理来自 S3 存储桶的文件;)
  • 现在限制为 1000 :-)
  • 此外,该信息现在已被弃用,如 you will always get 2 < n < 6 cores。今天是 2021-09-16,请注意这可能会再次发生变化。
  • 你是对的,这个答案很古老,不再相关。我更新了答案,以便其他人看到
【解决方案4】:

根据latest announcement from AWS,vCPU的最大数量是6个。

【讨论】:

  • 更新URL(更改:没有尾随0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2019-09-03
  • 2016-07-30
  • 1970-01-01
相关资源
最近更新 更多