我正在尝试查找AWS Lambda中可用的最大虚拟处理器核心数。官方文档暗示它会随着配置的内存量而扩展:
但是,即使我配置了可请求的最大内存量,运行以下代码段也会获得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()错误或错误解释了其结果?或者是否有其他配置需要获得更多内核?
答案 0 :(得分:22)
根据AWS Lambda documentation和forum,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)