实测 AWS Lambda 不同内存配置下的 CPU 核心数

目前(2023-05-25) AWS Lambda 的内存选择区间是 128MB ~ 10240MB, 最长运行时间为 15 分钟,但没有 vCPU 个数的选择。vCPU 的数量是基于所选内存大小而有不同的,如果我们在 Lambda 中需使用多进程充分发挥 CPU 性能的话,有必要了解当前 Lambda 所在运行环境的 CPU 内核数,甚至是单核的频率。

CPU 个数可用如下 Python 内置的其中一个方法取得

multiprocessing.cpu_count()
os.cpu_count()

要获得 CPU 频率或内存的话,将要用到 psutil  组件的方法,可把 psutil 做成 Lambda  层以引用,或与 Lambda 函数代码一同打成  zip 包。

安装方法 psutil

pip install --target . psutil

psutil 会安装到当前目录,然后在当前目录下再创建 lambda_function.py 文件,再打包

zip -r lambda.zip *

部署这个 lambda.zip 到 AWS Lambda  函数即可,指定相应的 Handler: lambda_function.lambda_handler

lambda_function.py 的内容为

测试响应格式为

下面是通过朴素的方式不断修改 Lambda 内存数获得的数据,内存设置从 128M 起,每次翻倍,直至 10240M,如有发现 CPU 个数变化再找到临界值,CPU 的频率全都是 2500 MHz

内存选择(M) psutil 显示总内存(M) CPU 个数
128 188 2
256 324 2
512 634 2
1024 1170 2
2048 3166 2
3008 3166 2
3009 5521 3
4096 5521 3
5120 5521 3
5307 5521 3
5308 7299 4
6144 7299 4
7076 7299 4
7077 9091 5
8192 9091 5
8845 9091 5
8846 10492 6
10240 10492 6

以上表格大概也只仅供参考,AWS 随时可能改变内存与 CPU 核心数的变化关系。

把内存选择与 vCPU 个数关系可以缩表如下:

内存(M) vCPU
128 - 3008 2
3009 - 5307 3
5308 - 7076 4
7077 - 8845 5
8846 - 10240 6

Lambda 实际运行环境中的总内存大小也并非选择多少就多少,而是有一系列点位值,选择的内存落在哪个区间就用向上接近的那个点位上的值。

链接:

  1. What is the psutil.cpu_freq() method?
  2. Python script to get CPU and RAM Usage

本文链接 https://yanbin.blog/get-aws-lambda-cpu-count-different-memory/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

2 Comments
Inline Feedbacks
View all comments
nobody
nobody
1 year ago

https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/gettingstarted-limits.html
这个文档提到:内存大小为 1769MB 时,函数的处理能力与一个 vCPU 等效。可以根据自己函数的内存配置大致算一下

Last edited 1 year ago by nobody