我正在尝试查找AWS Lambda中可用的最大虚拟处理器核心数.官方文档暗示它随着配置的内存量而扩展:
在AWS Lambda资源模型中,您可以为功能选择所需的内存量,并分配比例CPU功率和其他资源.例如,选择256MB内存为Lambda函数分配的CPU功率大约是请求128MB内存的两倍,CPU功率是选择512MB内存的一半.
但是,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()错误或错误解释了其结果?或者是否有其他配置需要获得更多内核?
根据AWS Lambda 文档和论坛,AWS未说明AWS用于此服务的实例类型.在2014年底,AWS使用了类似计算优化的实例.现在,AWS使用类似通用的实例.
专用于函数的CPU份额基于每个核心分配的内存部分.例如,一个具有~3 GB内存的实例可用于lambda函数,其中每个函数最多可以有1 GB内存,这意味着最多可以使用~1/3*2内核= 2/3的CPU.细节可能会在未来重新审视,但这是我们使用模型的分数性质.
您只能使用与内存成比例的CPU功率.虽然,较低和较高的内存是在同一个实例中,它们将共享比例CPU功率,这是更高的内存将获得更多的CPU功率.如果您读取的总CPU核心数为2,则并不意味着您可以充分利用所有CPU.
目前,没有办法配置CPU.只有你可以调整的总内存.
你问的是我认为的错误问题(或者想要将Lambda用于不适合的东西).一个Lambda函数只有一个或两个核心可用,但Lambda的功能是你可以同时运行数百个核心.活动Lambda函数的默认限制为100,但这只是保护基础结构(和您的钱包)的限制.你可以要求更多.
因此,您的帐户可以同时运行100个Lambda函数,您可以将其视为100个核心(但事实并非如此).如果您要求增加限额,也可以是1000或10,000或100,000.
打个比方:你有100台1核计算机,而不是1台100芯计算机.
虽然AWS直到今天没有透露有关AWS Lambda功能处理能力的任何细节,但他们现在宣布将最大内存从1536 MB增加到3008 MB.他们的文件现在说明:
大于1536MB的函数被分配多个CPU线程,并且需要多线程或多进程代码来利用额外的性能.
基于此,我们可以得出结论,所有AWS Lambda功能高达1536 MB的内存都有一个可用的虚拟处理器内核,而具有更多内存的功能有两个可用的内核.
更新:
虽然文档的这一部分不再可用,但AWS最近在2018-07-10的AWS无服务器启动日的Chris Munns透露,所有具有1.8GB 以上内存的AWS Lambda功能都在多个内核上运行.显然,AWS Lambda功能的单核和多核之间的界限从1.5GB增加到1.8GB.