Mac OS下100%加载RAM实验中的异常内存占用问题咨询
问题1解答
- 你看到的内存占用是虚拟内存统计值,两个场景的实际系统开销完全不同:
- 单进程运行第一个程序时,你创建的大元组所有元素复用Python内部驻留的0小整数,仅元组的指针数组占用少量物理内存,剩余申请的地址空间因未实际写入数据,系统采用懒加载机制未真实分配物理页,也不需要预留过多交换分区(swap)空间,总资源申请量在系统阈值内,因此不会触发告警,直到实际占用的物理内存+swap总和超过系统上限才会被OOM机制杀掉。
- 第二个程序同时启动10个独立进程,每个进程都要单独申请百GB级的虚拟地址空间,MacOS的内存预校验机制会提前统计所有并行进程的总申请额度,一旦超过物理内存+swap的总可分配上限,会直接触发资源不足告警,避免系统出现内存颠簸导致完全不可用。同时10个进程同时初始化大对象的操作会短时间产生大量页表申请、地址空间校验的CPU开销,也会进一步拉高负载触发告警。
问题2解答
- 你看到的120GB是虚拟内存占用量,并非实际使用的物理内存:
- 现代操作系统默认采用虚拟内存机制,每个进程拥有独立的虚拟地址空间,64位系统下进程地址空间上限可达数TB级别,远大于你设备的16GB物理内存,因此完全支持单进程申请上百GB的虚拟地址空间。
- 你在代码中申请大内存块后没有写入自定义内容,系统仅会创建虚拟地址到物理页的映射占位,不会真的分配对应大小的物理内存,你看到的统计值就是这个虚拟地址空间的总大小,实际物理内存占用仅为元组指针数组的大小,远小于120GB。
内容的提问来源于stack exchange,提问作者pinkotter
相关产品推荐
相关产品推荐

