如何解读Python内存分析图?Heap与Resident Size差异解析
关于Memray中Heap Size与Resident Size的区别及图表解读
一、Heap Size与Resident Size的核心区别
Resident Size
这是系统层面统计的进程实际占用物理RAM的总大小,包含:
- Python解释器本身的代码和内存
- 脚本依赖的所有第三方库、系统库的加载内存
- 进程的栈内存、堆内存
- 内核为进程分配的其他辅助内存
你可以把它理解为操作系统视角下,这个Python进程“占了多少内存条空间”。
Heap Size
这是Python虚拟机层面统计的动态分配对象的内存总和,仅包含你的脚本运行时创建的所有Python对象(比如列表、字典、自定义类实例、字符串等)占用的内存。它是脚本运行实际用到的内存(已分配给对象的部分),不是Python内存池预留的未使用空间——Memray只会统计已经被实际使用的堆内存,预留的空闲内存不会计入。
简单说:Heap Size是你的业务代码直接产生的内存开销,Resident Size是整个Python进程的总内存占用量。
二、Memray内存图表的读取方法
以Memray默认的时间线图表为例:
- 横轴:脚本从启动到结束的时间轴,标注了关键时间节点
- 纵轴:内存占用量(单位通常为MB/GB)
- 曲线含义:
- Heap Size曲线:直接反映脚本中对象的创建与销毁情况。突然上升说明代码创建了大量对象(比如批量读取数据、生成大列表);下降说明Python垃圾回收机制回收了未被引用的对象,或者你手动释放了对象内存。
- Resident Size曲线:变化相对平缓,因为它包含更多非业务对象的内存开销。比如脚本启动时加载解释器和库,曲线会快速上升;之后即使Heap Size下降,Resident Size可能不会立刻回落(因为操作系统不会马上回收已分配给进程的物理内存)。
- 关键指标看峰值:
- Heap Size峰值:对应脚本运行中内存需求最紧张的时刻,通常是业务逻辑中对象数量最多的阶段,也是内存泄漏排查的重点关注节点。
- Resident Size峰值:是进程实际占用物理内存的最大值,反映了整个Python进程对系统内存的最高需求。
- 差值分析:如果Heap Size远小于Resident Size,说明进程的内存开销主要来自Python解释器、依赖库等非业务代码部分,而非你的脚本逻辑。
内容的提问来源于stack exchange,提问作者Tlaloc-ES
相关产品推荐
相关产品推荐

