“内存”列
又称:内存占用量
简要回答
活动监视器中的“内存”列显示每个进程使用了多少内存。这个数值反映的是进程的内存占用量,所以它可能包括已被压缩的内存,而不只是以未压缩形式留在内存中的数据。
按“内存”列排序,是查看哪些进程占用内存最多的最快方法。它是按进程计算的数值:有帮助程序的App会分散在好几行中。
把每一行加起来,并不会等于窗口底部的“已使用内存”。进程之间可以共享内存,而且总量的计算方式也不同。
本页内容
为什么一个App的内存看起来比预想的低
很多App会运行帮助程序,每个帮助程序各占一行。浏览器的主行数值可能不高,而它的帮助程序加起来却多得多。使用“显示”→“所有进程,分层显示”可以看到部分帮助程序列在其父进程下,或者自己把各行加起来。
如何使用“内存”列
内存压力变黄或变红时,按它排序。留意是否有进程在你没多做什么的情况下不断变大,这可能说明存在泄漏。退出并重新打开App,就能释放它的内存。
你可以通过“显示”→“列”添加其他内存列,例如“被压缩的内存”,查看每个进程的更多细节。
“内存”列衡量的是什么
macOS会为每个进程持续统计一个叫作物理占用(physical footprint)的数值。它跟踪的是进程写入过并拥有的内存。活动监视器中的“内存”列和top命令中的MEM列显示的都是这个数值。
因为它统计的是进程拥有的内存,而不只是此刻留在RAM中的内存,所以它可能包括压缩的数据,以及系统代表该进程用于图形的内存。它不包括进程只是读取过的文件,这些文件系统可以丢弃,之后再重新读取。
驱动程序或系统组件代表某个进程预留的部分内存,会被有意排除在它的占用之外,因为进程无法控制这部分的大小。所以“内存”列很适合用来比较各个进程,但并不能精确记录一个进程让系统用掉的每一个字节。
如何在“终端”中查看进程的内存
这些命令只读取信息。在活动监视器没有打开,或者你想长期记录某个数字时,它们很有用。
- 运行
top -o mem,列出按内存排序的进程。MEM列与活动监视器的“内存”列一致。按q退出。 - 运行
top -l 1 -o mem -n 10 -stats pid,command,mem,输出一次最大的十个进程,然后退出。 - 运行
footprint并在后面加上App名称,比如footprint Safari,就能看到它按类别划分的内存。末尾的phys_footprint行与“内存”列一致,phys_footprint_peak则是该进程启动以来的最高值。 - 注意,
ps显示的是RSS,也就是和“实际内存”列一样的常驻大小,所以它的数字和“内存”列对不上。
如何用“内存”列发现内存泄漏
- 如果你想更新得更快,在“内存”标签页中选取“显示”>“更新频率”>“非常频繁(1秒)”。
- 找到这个App及其帮助程序进程,记下它的“内存”数值。
- 照平常那样继续使用这个App,不要打开更多文稿或窗口。
- 过一段时间再看这个数值。如果它不断攀升、从不回落,即使关掉你打开的东西也一样,那这个App很可能在泄漏内存。
- 退出并重新打开这个App来释放内存。如果问题再次出现,就看看这个App有没有更新。
常见问题
活动监视器中的“内存”列是什么意思?
它是每个进程使用的内存量,依据的是进程的内存占用量。按它排序,就能找到占用最多的。
为什么“内存”列的数值加起来不等于“已使用内存”?
进程之间会共享一部分内存,而系统总量的计算方式也不同,所以各行之和与总量不会完全一致。
为什么一个App会显示很多行?
这个App运行了帮助程序,而活动监视器把每个进程单独列出。
“内存”列和“实际内存”是一回事吗?
不是。“内存”是进程的占用,可能包括压缩的数据。“实际内存”只是此刻在RAM中的部分,其中包括一些与其他进程共享的内存。
“内存”列包括GPU内存吗?
它可能包括系统算到该进程头上的图形内存,因为占用这个数值涵盖多种内存,而不只是普通的App数据。
为什么“内存”列和ps或其他工具对不上?
ps这类工具报告的是常驻大小,统计内存的方式不同。top命令的MEM列和footprint命令,使用的是和活动监视器相同的占用统计。
相关条目
分步指南:哪个App在占用CPU或内存。
想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。