为何Python用psutil测函数内存与AWS Lambda显示值存在差异?
Python本地与AWS Lambda内存使用差异的原因分析
问题背景
你在本地用这段Python代码测量函数内存:
process = psutil.Process() start_memory = process.memory_info().rss print(f"Memory Usage : {end_memory} bytes")
得到的结果是 Memory Usage: 22220800 bytes(约21MB),但将同一函数部署到AWS Lambda后,控制台显示的最大内存使用量为36MB,两者相差近14MB,以下是差异产生的核心原因:
具体原因
- 测量范围不一致:
psutil统计的只是当前Python进程自身的驻留集(RSS)内存,仅包含你的业务代码和Python解释器直接占用的内存。而AWS Lambda统计的是整个运行环境的总内存消耗,包括Lambda Runtime层的额外进程(比如日志收集代理、Runtime管理进程、底层系统组件等),这些系统级进程的内存不会被你的psutil代码捕获。 - 环境初始化开销未被统计:Lambda在执行函数前会完成环境初始化工作——加载Python Runtime、配置环境变量、启动服务相关进程等,这部分内存占用会被计入Lambda的最大内存统计,但你的代码是在函数执行阶段测量的,完全没覆盖初始化阶段的内存消耗。
- 统计时机与维度不同:你的代码存在逻辑问题(定义了
start_memory却输出end_memory),实际只测量了某个单一时间点的内存;而Lambda统计的是函数整个生命周期内的峰值内存,包括函数执行过程中临时对象创建、依赖库加载等所有环节的内存最大值,自然会比单次测量的数值高。 - 依赖加载差异:本地运行时可能仅加载了业务必需的依赖,而Lambda环境默认会预装完整的AWS SDK等组件,这些额外依赖的内存占用会被Lambda统计,但你的本地测量未包含这部分。
内容的提问来源于stack exchange,提问作者karthika kannan
相关产品推荐
相关产品推荐

