Answers:
交换分区用于两个目的。
它用作“备份” RAM。也就是说,如果您的计算机内存不足,它将使用交换区域作为更多内存的临时来源。更具体地说,它会将RAM中未使用的项目“交换”到交换区域,以便为当时需要它的应用程序留下可用空间。这是不理想的,因为到硬盘驱动器的数据传输速率大大低于向普通RAM的数据传输速率。实际上,这意味着从交换区域检索信息要慢得多。
计算机休眠时使用。休眠涉及在当前状态下获取RAM的映像(例如ISO代表映像),然后将其保存到交换区域。然后,当计算机重新启动时,它将重新加载该映像。
为了最有用,交换区域至少应为(RAM * 1.5),尽管建议更多。例如,在具有3gb RAM的系统上,我的交换区为7.2gb。
该free
命令可以告诉您正在使用多少交换空间。例如在这台机器上:
$ free -m
total used free buffers cached
Mem: 1947 1863 84 312 758
-/+ buffers/cache: 792 1154
Swap: 4000 3 3997
向我显示我有2GB(1947m)RAM,并且系统已使用了大部分RAM。但是,312m用于I / O缓冲区,其余部分(758m)用于系统决定填充磁盘缓存。
磁盘缓存很有趣,因为它使用快速内存而不是慢速磁盘来存储其内容。内容可以从磁盘上获取,但是可以保留在需要的地方。这也意味着,如有必要,可以立即回收758m的内存,因为系统知道它可以在磁盘上找到该数据。
这就是为什么第二行显示如果没有缓冲和缓存,那么我将有一半的RAM(1154m)可供使用。
第三行显示我有一个太大的交换分区(它在那里并且没有做任何事情),其中已经使用了高达3m的分区。内核确实不希望很快使用这些东西,因此它被卡在“后沿”上。
虽然free
现在为您提供了快照,但vmstat
可以为您提供一张运行画面:
$ vmstat 10
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 3588 86236 316524 769132 0 0 14 13 126 81 4 1 95 0
0 0 3588 83872 316532 770512 0 0 0 20 264 1229 3 1 96 0
那里有很多信息,但是有趣的是,没有交换(si)或交换(so)流量。这意味着我在过去10秒钟内根本没有使用交换。
您可以使用以下命令检查已使用和可用的交换区域:
$ cat /proc/swaps
Filename Type Size Used Priority
/dev/sda10 partition 7812092 16 -1
我有一台笔记本电脑,其硬盘驱动器速度较慢,但RAM相对较高(8GB)。在这种设置下,由于以下原因,我发现交换驱动器适得其反:
使应用程序退出交换很慢,这与从头开始加载应用程序相当。我宁愿有一个能够快速响应的环境,即使那意味着我有时不得不关闭并重新加载应用程序,而不是有时会意外地使我停滞不前的环境。
如果我想要休眠的功能,那意味着将大量数据写入磁盘。如果持续进行(交换默认值为 60),或者仅在休眠时(通过减少交换)进行操作,则将持续消耗电池,那么实际休眠将花费很长时间。我发现暂挂是RAM,而不是暂挂到磁盘非常令人满意。它可能会暂停几天,并且比完全休眠要快得多。
因为硬盘驱动器很慢,所以我宁愿为磁盘缓存保留1GB的RAM,从而有效地交换内存以提高速度。这使我的机器保持快照状态,但这确实意味着我只能将7GB的8GB RAM用于应用程序。我使用的软件是Earlyoom的一个分支,当使用88%的RAM时,它将杀死旧的浏览器选项卡。我有时不得不重新加载已被删除的旧浏览器选项卡。
该建议什么时候不适用?
如果您拥有快速的硬盘驱动器或SSD,而对电池消耗的担忧较少,那么我上面概述的缺点将不适用。(尽管早期的SSD可能有磨损问题,但我相信自2018年以来销售的任何SSD都可以。)
如果您的计算机上的RAM很少,或者您想同时使用多个需要大量内存的应用程序,那么无论有什么缺点,您都可能需要使用swap来完成工作。在内存开始变得便宜之前,这是交换的主要用例。
如果您确实需要休眠(也许想挂起笔记本电脑,几天后不带电就重新打开笔记本电脑),那么就需要一个交换驱动器(建议至少与RAM一样大)。
警告: