交换分区的重要性


34
  • 交换分区的目的是什么?
  • 我怎么知道我有足够的交换分区?不会太多/很小。

我的Ubuntu PC用于典型的东西:

  • 网络(电子邮件,Facebook等)
  • 一些电影
  • 游戏是罕见的

根据发布的内容,我似乎有太多交换。3GB RAM,300GB HD和用于交换的8GB分区。
lamcro 2010年

2
不使用的多余交换不会对您造成伤害,收回1.7%的驱动器以使其更小可能不值得。是的,它比您可能会用到的要大得多,我不会担心。
msw

1
您还可以将其视为“面向未来的”交换分区,如果您向系统中添加了额外的内存,则不必扩大交换... :)
JanC

Answers:


15

交换分区用于两个目的。

  • 它用作“备份” RAM。也就是说,如果您的计算机内存不足,它将使用交换区域作为更多内存的临时来源。更具体地说,它会将RAM中未使用的项目“交换”到交换区域,以便为当时需要它的应用程序留下可用空间。这是不理想的,因为到硬盘驱动器的数据传输速率大大低于向普通RAM的数据传输速率。实际上,这意味着从交换区域检索信息要慢得多。

  • 计算机休眠时使用。休眠涉及在当前状态下获取RAM的映像(例如ISO代表映像),然后将其保存到交换区域。然后,当计算机重新启动时,它将重新加载该映像。

  • 为了最有用,交换区域至少应为(RAM * 1.5),尽管建议更多。例如,在具有3gb RAM的系统上,我的交换区为7.2gb。


如果您不使用某些东西,理想的情况将其交换到磁盘上,并将RAM用于您确实要使用的东西(例如,不经常交换使用的CUPS或其他守护程序)会为您提供更多用于缓存磁盘的内存实际使用的数据很多)。
2010年1

-1; “(RAM * 1.5),尽管建议增加更多”-在台式机上?您是在重复多年来一直是错误的传统智慧。

@ user280493值得一提的是,答案已经存在多年了……几年前,当您评论时。
Crisfole '18

7

这非常接近 关于交换分区的“正确”大小的问题。从我那里得到的答案中,许多相同的信息都适用-基本上,如果您要休眠,通常希望交换空间至少与RAM一样大,而除1或2 GB这样的整数之外,这很容易。因为交换是如此之多比RAM慢得多,,如果要填充多个GB的交换,几乎可以肯定,计算机将变得无法使用。

交换分区也不是真正需要的-交换文件(在主流linux文件系统上可用)具有相同的性能,并且如果您认为还不够的话,可以轻松地增加更多的交换空间。


4

这里是有关交换的非常深入的信息

有人说您的公羊加倍,但我个人建议:

交换= 1.5 X总公羊

范例:

如果您有2Gb的内存-> swap = 1.5 x 2 = 3

PD:Ubuntu Desktop使用Swap进入休眠状态(PC关闭,不需要电源,程序状态已保存)。如果休眠对您来说很重要,则有更多的交换空间,然后RAM +交换溢出。


2

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秒钟内根本没有使用交换。


0
  • 交换区域是硬盘空间的一部分,用于支持有限空间的RAM内存。RAM的大小受到限制,因此,某些应用程序需要的RAM超过可用RAM空间的数量。在这种情况下,此交换空间也称为虚拟内存,用于支持RAM。
  • 与RAM的速度相比,它的速度较慢。当我们运行一个大型应用程序时,该应用程序中最近最少使用的部分将交换到硬盘驱动器上的“交换区”中,并在需要时从“交换区”中交换回来。这给操作系统带来了一个比实际更多的RAM的感觉。
  • 它是在安装操作系统时在硬盘上创建的专用分区。
  • 如果创建两倍于RAM大小的交换区域,则效果很好。
  • 您可以使用以下命令检查已使用和可用的交换区域:

    $ cat /proc/swaps 
    Filename                Type        Size    Used    Priority
    /dev/sda10              partition   7812092  16      -1
    

0

我有一台笔记本电脑,其硬盘驱动器速度较慢,但​​RAM相对较高(8GB)。在这种设置下,由于以下原因,我发现交换驱动器适得其反:

  1. 使应用程序退出交换很慢,这与从头开始加载应用程序相当。我宁愿有一个能够快速响应的环境,即使那意味着我有时不得不关闭并重新加载应用程序,而不是有时会意外地使我停滞不前的环境。

  2. 如果我想要休眠的功能,那意味着将大量数据写入磁盘。如果持续进行(交换默认值为 60),或者仅在休眠时(通过减少交换)进行操作,则将持续消耗电池,那么实际休眠将花费很长时间。我发现暂挂是RAM,而不是暂挂到磁盘非常令人满意。它可能会暂停几天,并且比完全休眠要快得多。

  3. 因为硬盘驱动器很慢,所以我宁愿为磁盘缓存保留1GB的RAM,从而有效地交换内存以提高速度。这使我的机器保持快照状态,但这确实意味着我只能将7GB的8GB RAM用于应用程序。我使用的软件是Earlyoom的一个分支,当使用88%的RAM时,它将杀死旧的浏览器选项卡。我有时不得不重新加载已被删除的旧浏览器选项卡。

该建议什么时候不适用?

  • 如果您拥有快速的硬盘驱动器或SSD,而对电池消耗的担忧较少,那么我上面概述的缺点将不适用。(尽管早期的SSD可能有磨损问题,但我相信自2018年以来销售的任何SSD都可以。)

  • 如果您的计算机上的RAM很少,或者您想同时使用多个需要大量内存的应用程序,那么无论有什么缺点,您都可能需要使用swap来完成工作。在内存开始变得便宜之前,这是交换的主要用例。

  • 如果您确实需要休眠(也许想挂起笔记本电脑,几天后不带电就重新打开笔记本电脑),那么就需要一个交换驱动器(建议至少与RAM一样大)。

警告:

  • 我们长时间运行的某些软件(尤其是OS和桌面环境)会将代码加载到内存中,而这些代码实际上将不再使用。这些页面可以移动到交换位置,而无需再次拉出,从而避免了我前面提到的缺点。由于这个原因,有时我会创建一个小的 512MB或1GB的交换文件,然后让未使用的内存页交换出去。这只给我留了一些RAM用于应用程序。(需要:一种用于测量交换流失的技术,以帮助调整此交换文件的大小。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.