6

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

 1 year ago
source link: https://yanbin.blog/get-aws-lambda-cpu-count-different-memory/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

2023-05-25 | 阅读(6)

目前(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 的内容为

import psutil
import os
def lambda_handler(event, context):
    mem_usage = psutil.virtual_memory()
    return {
        "memory": f"{mem_usage.total/(1024**2):.0f}M",
        "cpu_count": os.cpu_count(),
        "cpu_freq": f"{int(psutil.cpu_freq()[0])}MHz"

测试响应格式为

  "memory": "3166M",
  "cpu_count": 2,
  "cpu_freq": "2500MHz"

下面通过朴素的方式通过不断修改 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 核心数的变化关系。

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

Categories: Uncategorized
Tags: AWS

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK