术语表/内存

已使用的交换

简要回答

“已使用的交换”是macOS在启动磁盘上用来把内存换出和换回的空间大小。当物理内存不够容纳所有正在运行的东西时,就会用到它。

内存满了,即使压缩之后仍然不够时,macOS会把一部分内存写到启动磁盘上,需要时再读回来。这部分磁盘空间就是交换空间。

即使是很快的固态硬盘,从磁盘读取也比从内存读取慢得多,所以频繁交换会让Mac感觉很慢。

有一些交换是正常的吗?

是的。少量交换不是问题,特别是Mac已经开机很久之后。macOS可能会把很少用到的旧数据留在交换空间里。重要的是Mac此刻是否在频繁交换,这会表现为内存压力变黄或变红。

如何减少交换

退出不用的App,关掉浏览器标签页。App退出后,交换不一定会马上减少。重新启动Mac会将其清空。

如果每次使用平常那些App时,交换都迅速攀升,内存压力也经常变红,说明按这样的工作量,这台Mac需要更多内存。不要手动删除交换文件;它们由macOS管理。

如何查看Mac的交换使用情况

“已使用的交换”位于活动监视器“内存”标签页的底部。你也可以在“终端”中查看。以下命令只读取信息。

  1. 运行sysctl vm.swapusage。输出会显示交换的总量、已用量和剩余量。末尾的encrypted表示交换文件已加密。
  2. 运行ls -lh /System/Volumes/VM,查看交换文件本身,它们名为swapfile0、swapfile1,依此类推。只看就好,不要删除或移动它们。
  3. 观察工作时已用量是在不断上升,还是保持不变。

如何判断Mac此刻是否正在交换

“已使用的交换”是一个总量。Mac停止交换后很久,它可能仍然很高。活动监视器对它的说明是:为给最近使用的数据腾出空间而暂时移到磁盘上的压缩数据,所以之后一直没被用到的数据,可能就一直待在那里。要看此刻是否正在交换,应该看速率。

  1. 在“终端”中运行vm_stat 5。它每5秒输出一行。按Control-C停止。
  2. 忽略第一行,它显示的是启动以来的总数。
  3. 看后面各行的swapins和swapouts列。它们显示每5秒内有多少页面在RAM和磁盘之间移动。
  4. 大部分时候是零,说明磁盘上的交换是旧数据,不会拖慢你。工作时大多数行都有数字,说明Mac正在频繁交换,这时你通常也会看到黄色或红色的内存压力。

交换过高的常见原因

当App需要的内存超过了Mac通过压缩RAM中的数据所能提供的量时,交换就会增长。这不需要你同时在用每一个App。后台的App照样占着内存。典型原因有:

  • 同时运行的吃内存App太多,超出了Mac的RAM容量。
  • 虚拟机,它们在运行时会占用大量内存。
  • 存在内存泄漏、在几小时或几天里不断增长的App。
  • 大量开着的浏览器标签页,每个都在后台占着内存。
  • 运行时间很长,早先移到磁盘上的旧数据还留在那里。

正常的与值得担心的交换

正常:Mac开了几天之后有一些交换,而内存压力是绿色,vm_stat也几乎没有显示交换活动。即使RAM看起来还有空闲,交换也可能一直被占用,因为在有东西需要之前,macOS不会把旧数据读回内存。

值得担心:每次用你平常那些App,“已使用的交换”都在攀升,vm_stat的大多数行都显示交换活动,内存压力是黄色或红色。对于这样的工作负载,Mac需要更多RAM,或者少同时运行一些App。Vitals为每个App保留30天的内存历史记录,可以显示交换上升之前是哪个App在增长。

常见问题

Mac上的“已使用的交换”是什么?

它是内存满了时,macOS在启动磁盘上用作额外内存的空间。

交换很高对Mac不好吗?

少量是正常的。如果交换很大或不断增长,同时内存压力为黄色或红色,说明Mac内存不够,会变慢。

如何清除Mac上的交换?

退出占内存多的App,或者重新启动Mac。不要手动删除交换文件。

交换会磨损Mac的固态硬盘吗?

交换会写入固态硬盘,而每块固态硬盘在其寿命中能承受的写入量是有限的。偶尔交换不必担心。持续大量交换写入得更多,所以无论为了速度还是磨损,都值得减少。

Mac上的交换文件存储在哪里?

在/System/Volumes/VM中,文件名为swapfile0、swapfile1,依此类推。macOS会根据需要创建和删除它们,不应该去动。

可以在Mac上关闭交换吗?

没有这个设置,你也不应该尝试。没有交换,App就不是变慢,而是内存耗尽。

相关条目

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

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