术语表/内存

“内存”列

又称:内存占用量

简要回答

活动监视器中的“内存”列显示每个进程使用了多少内存。这个数值反映的是进程的内存占用量,所以它可能包括已被压缩的内存,而不只是以未压缩形式留在内存中的数据。

按“内存”列排序,是查看哪些进程占用内存最多的最快方法。它是按进程计算的数值:有帮助程序的App会分散在好几行中。

把每一行加起来,并不会等于窗口底部的“已使用内存”。进程之间可以共享内存,而且总量的计算方式也不同。

为什么一个App的内存看起来比预想的低

很多App会运行帮助程序,每个帮助程序各占一行。浏览器的主行数值可能不高,而它的帮助程序加起来却多得多。使用“显示”→“所有进程,分层显示”可以看到部分帮助程序列在其父进程下,或者自己把各行加起来。

如何使用“内存”列

内存压力变黄或变红时,按它排序。留意是否有进程在你没多做什么的情况下不断变大,这可能说明存在泄漏。退出并重新打开App,就能释放它的内存。

你可以通过“显示”→“列”添加其他内存列,例如“被压缩的内存”,查看每个进程的更多细节。

“内存”列衡量的是什么

macOS会为每个进程持续统计一个叫作物理占用(physical footprint)的数值。它跟踪的是进程写入过并拥有的内存。活动监视器中的“内存”列和top命令中的MEM列显示的都是这个数值。

因为它统计的是进程拥有的内存,而不只是此刻留在RAM中的内存,所以它可能包括压缩的数据,以及系统代表该进程用于图形的内存。它不包括进程只是读取过的文件,这些文件系统可以丢弃,之后再重新读取。

驱动程序或系统组件代表某个进程预留的部分内存,会被有意排除在它的占用之外,因为进程无法控制这部分的大小。所以“内存”列很适合用来比较各个进程,但并不能精确记录一个进程让系统用掉的每一个字节。

“内存”与“实际内存”“专用内存”和“共享内存”

在“内存”标签页中,选取“显示”>“列”可以添加更多内存列。每一列统计的都不一样:

  • 内存:进程的物理占用。比较进程时用这一列。
  • 实际内存:进程此刻有多少在RAM中,也叫常驻大小。它不包括压缩的数据,但可能包括共享内存,所以可能比“内存”高,也可能比它低。
  • 专用内存:只由这个进程使用的常驻内存。
  • 共享内存:进程与其他进程共享的常驻内存,比如系统库。
  • 可清除内存:App标记为在系统需要空间时可以安全丢弃的内存。
  • VM被压缩:进程的内存中有多少已被压缩。

如何在“终端”中查看进程的内存

这些命令只读取信息。在活动监视器没有打开,或者你想长期记录某个数字时,它们很有用。

  1. 运行top -o mem,列出按内存排序的进程。MEM列与活动监视器的“内存”列一致。按q退出。
  2. 运行top -l 1 -o mem -n 10 -stats pid,command,mem,输出一次最大的十个进程,然后退出。
  3. 运行footprint并在后面加上App名称,比如footprint Safari,就能看到它按类别划分的内存。末尾的phys_footprint行与“内存”列一致,phys_footprint_peak则是该进程启动以来的最高值。
  4. 注意,ps显示的是RSS,也就是和“实际内存”列一样的常驻大小,所以它的数字和“内存”列对不上。

如何用“内存”列发现内存泄漏

  1. 如果你想更新得更快,在“内存”标签页中选取“显示”>“更新频率”>“非常频繁(1秒)”。
  2. 找到这个App及其帮助程序进程,记下它的“内存”数值。
  3. 照平常那样继续使用这个App,不要打开更多文稿或窗口。
  4. 过一段时间再看这个数值。如果它不断攀升、从不回落,即使关掉你打开的东西也一样,那这个App很可能在泄漏内存。
  5. 退出并重新打开这个App来释放内存。如果问题再次出现,就看看这个App有没有更新。

常见问题

活动监视器中的“内存”列是什么意思?

它是每个进程使用的内存量,依据的是进程的内存占用量。按它排序,就能找到占用最多的。

为什么“内存”列的数值加起来不等于“已使用内存”?

进程之间会共享一部分内存,而系统总量的计算方式也不同,所以各行之和与总量不会完全一致。

为什么一个App会显示很多行?

这个App运行了帮助程序,而活动监视器把每个进程单独列出。

“内存”列和“实际内存”是一回事吗?

不是。“内存”是进程的占用,可能包括压缩的数据。“实际内存”只是此刻在RAM中的部分,其中包括一些与其他进程共享的内存。

“内存”列包括GPU内存吗?

它可能包括系统算到该进程头上的图形内存,因为占用这个数值涵盖多种内存,而不只是普通的App数据。

为什么“内存”列和ps或其他工具对不上?

ps这类工具报告的是常驻大小,统计内存的方式不同。top命令的MEM列和footprint命令,使用的是和活动监视器相同的占用统计。

相关条目

分步指南:哪个App在占用CPU或内存。

想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。