我有 16GB 内存。我需要 32GB 交换吗?

Tam*_*lei 302 swap ram

我读过很多地方,交换空间的经验法则是将物理 RAM 量加倍。但是,32 GB 看起来确实很多。我需要那么多吗?这么大的物理内存,我真的需要它吗?

小智 260

这是 Red Hat 的一个非常好的建议:推荐的系统交换空间

同一链接的摘录:

在过去的几年里,推荐的交换空间量随着系统中的 RAM 量线性增加。但是,现代系统通常包含数百 GB 的 RAM。因此,建议的交换空间被视为系统内存工作负载的函数,而不是系统内存。

另一个来自旧版本页面的摘录:

但是,考虑到交换空间通常在安装时指定,并且很难预先确定系统的内存工作负载,我们建议使用下表确定系统交换。

RHEL 8 表:

Amount of RAM    Recommended swap space       Recommended swap space 
in the system                                 if allowing for hibernation
--------------   --------------------------   ---------------------------
? 2 GB           2 times the amount of RAM    3 times the amount of RAM
> 2 GB – 8 GB    Equal to the amount of RAM   2 times the amount of RAM
> 8 GB – 64 GB   At least 4 GB                1.5 times the amount of RAM
> 64 GB          At least 4 GB                Hibernation not recommended
Run Code Online (Sandbox Code Playgroud)

在上表中列出的每个范围之间的边界处,例如具有 2 GB、8 GB 或 64 GB 系统 RAM 的系统,可以自行决定选择的交换空间和休眠支持。如果您的系统资源允许,增加交换空间可能会带来更好的性能。对于具有超过 140 个逻辑处理器或超过 3 TB RAM 的系统,建议至少使用 100 GB 的交换空间。

原始 RHEL 5 表:

Amount of RAM in the System     Recommended Amount of Swap Space
4GB of RAM or less              a minimum of 2GB of swap space
4GB to 16GB of RAM              a minimum of 4GB of swap space
16GB to 64GB of RAM             a minimum of 8GB of swap space
64GB to 256GB of RAM            a minimum of 16GB of swap space
256GB to 512GB of RAM           a minimum of 32GB of swap space 
Run Code Online (Sandbox Code Playgroud)

  • RAM 的平方根(以 GB 为单位),四舍五入到 2 的幂。 (82认同)
  • “新”表中存在不一致 - 根据指南,16GB 的交换空间适合 32GB 系统,但 4GB 适合 64GB 系统...... (2认同)
  • @Charlie 那是因为您不太可能用 64GB RAM 耗尽工作内存.. (2认同)

pop*_*pey 206

这完全取决于您打算用机器做什么。例如,如果它是 Sap 服务器,那么是的,我会添加 32gb 交换(我们有使用 128gb ram 和 32gb 交换的盒子)。如果您正在处理大量图片和视频,那么进行一些交换是有意义的。32GB 可能有点矫枉过正。

但是我不会说零交换。

万一您用完 RAM - 可能打开一个大文件,在 Firefox 中打开一个长时间运行的选项卡,没关系,在这种情况下,您的内核 OOM 杀手将启动并开始杀死应用程序以取回内存。在这种情况下,您完全有可能因为应用程序被终止而丢失数据。但是,如果您有一点交换,那么系统将继续,获取交换并允许系统继续。随着大量交换的发生,系统会变慢,您会在所有交换耗尽之前注意到并进行调查。磁盘也很便宜,那么为什么不交换呢?

任何说“你不需要交换”而不问你你实际上用你的电脑做什么的人都是在做假设。虽然您可能对占用 RAM 的计算机几乎没有做任何事情,但在做出您不需要“交换”的草率判断之前,最好先询问有关您打算用它做什么的问题。在我的愚见

  • 你能详细说明为什么对零交换说不吗?其他人似乎同意没有必要,除非我想休眠(我不想)。 (17认同)
  • 拥有一个具有 8 GB RAM 的系统,我可以这样说:任何时候我有一个程序跑掉并进入交换区,我的系统将变得几乎没有响应。让 OOM 杀手运行总比强制不干净的重启要好;如果你有那么多内存,除非你在做需要数千兆字节内存的非常*非常*繁重的工作,否则你会没事的。即使您确实有繁重的工作,通常也有一种不需要交换空间的方法来处理它(这比在应用程序本身中处理大数据集效率低)。 (13认同)
  • HDD 上的空间可能很便宜,但 SSD 上的空间却并不便宜;不像 DAM 那样昂贵,但仍然如此。 (6认同)
  • @popey - 那么如果系统用完交换呢?回到第一个广场,那里。 (4认同)
  • 如果您的系统使用 31GB 交换并且您_需要_最后一个 GB,它们可能会_非常_ 慢。恕我直言,如果您经常需要超过 2GB 的交换空间,您应该安装更多的 RAM。 (4认同)
  • 我不认为答案需要改变。作为测试(并且由于我对这个答案的负面反馈),我运行了我的 16GB Thinkpad X220,有一段时间没有交换。在很多情况下,内存压力导致 kswapd 进程进入精神状态(寻找交换)并使机器完全 IO 饥饿并且在颠簸时完全无法使用。进行少量交换使此问题完全消失。所以我仍然支持“不交换”并不总是正确答案的回应,无论你有多少内存。 (2认同)

bre*_*ent 64

啊。这篇文章的答案非常错误,这是 Google 搜索“交换多少?”的第一个结果之一。

首先,一个很好的参考点是Ubuntu Swap FAQ

这个常见问题提出了一个重要的观点,这里没有人提到,那就是(强调我的)

有时,大型程序(如 OpenOffice、Neverwinter Nights 或视频编辑器)会使整个系统需要额外的内存。这些大型程序在启动期间使用的大量页面可能仅用于初始化,然后再也不会使用。系统可以换出这些页面并为其他程序甚至磁盘缓存释放内存。在这些情况下,交换将用于帮助系统处理任何额外的负载。

所以,交换不仅仅是为了休眠!这种交换未使用页面的活动在某些情况下可能是有益的,而在其他情况下则是有害的。有益是因为它可以为系统释放内存以供其他地方使用,但当交换过于激进并交换出您真正想要的页面时则有害。在桌面系统上尤其如此,应用程序可以长时间闲置,但用户仍然希望在将其恢复活力时立即获得性能。对这种攻击性的控制称为swappiness

Ubuntu Swap FAQ 在What is swappiness and how to change it?下轻松地讨论了这个问题Ubuntu 系统上的默认值是 60,而 FAQ 建议台式机的默认值是 10。

所以,我会说,没有一个绝对没有交换空间的系统通常是非常重要的,因为有些人在这个问题上建议,除非你知道你的系统的某些非常具体的使用场景并且非常清楚后果它可以有。(就我个人而言,我不会在没有交换的情况下运行系统)在没有交换的内存不足的情况下,系统将开始杀死进程(通常是导致 OOM 的进程)

  • 支持常见问题解答的链接,并在意见和轶事证据中引入一些理智。 (7认同)
  • 为了减轻额外负载的内存,我更喜欢 zRAM 和 swappiness=60 ,而不是传统的 HDD 交换。 (4认同)
  • 关键是还没有这么大的程序,而你的链接说的恰恰相反。请参阅此https://help.ubuntu.com/community/SwapFaq#How_much_swap_do_I_need.3F (2认同)

ban*_*ndi 27

可能不是。如果您打算使计算机休眠(挂起到磁盘),则至少需要 16 GB。如果您不休眠,则让几 GB 的空间用于交换就足够了(最多 4-8 个)

  • 使用 16gb 内存和 4gb 交换区休眠是很有可能的:当你进入休眠状态时,你只需要使用少于 4gb 的内存。 (12认同)
  • @scribu 这听起来很有趣。我怀疑某处可能有一个交换文件,因为要完全关闭您的笔记本电脑(即拔下并取出电池),必须保存 RAM 的内容 (8认同)
  • 我根本没有交换,可以很好地休眠/暂停我的笔记本电脑。 (2认同)

Lui*_*ado 20

根据经验,我可以这样说:

对于我使用 4GB 内存 3 年所见,Ubuntu 的交换使用量约为 60MB,但仅在执行一些非常密集的任务时才使用。几周前,我开始使用具有 16GB 内存的 PC,并且交换使用率一直保持在 0%。我已经完成了多次编译、视频渲染和其他密集型任务。交换从未发生过变化。甚至没有 1KB 的变化。

基本上,在 Ubuntu 中,您拥有的内存 RAM 越多,您为任何任务使用或需要交换的可能性就越小。16GB内存,甚至8GB内存都绰绰有余。我已经完成了 16GB PC 8 Virtualbox PC(每个在 1GB 到 2GB 内存之间)。我已经编译并渲染了 720p 视频,即使在这些条件下也没有更改交换。

话虽如此,两倍内存 ram 的规则不应该适用于基于 Linux 的系统,如果您有更多内存,则更是如此。但是,您应该拥有与 ram 大小相同的交换大小,或者如果您打算休眠,因为休眠过程会抓取 ram 中的所有内容并将其置于交换中,这就是为什么您需要一个与 ram 大小相等的最小大小交换。

另一个细节是某些应用程序(不是全部)仍会强制从交换中读取。所以有一点是好的。如果您遇到内存不足或 OOM 的情况,完全禁用它是非常糟糕的。此时,如果您没有交换,内核将无法换入/换出不同的 ram 应用程序用法,最终将开始杀死较少使用的应用程序。

如果它有助于家庭桌面决策,在 4 年多更新此答案后,我使用了 16gb、32gb 和现在 64gb ram PC。仅使用 128MB 的交换进行测试表明,除非我想休眠,否则我不需要更大的交换。我在它们上面使用过云环境,lxc、virtualbox、wine,你能想到的。我用 openshot、kazam、handbrake、audacity 渲染了视频。我使用过 gimp、blender、Inkscape 甚至完整的 LibreOffice 套件。我什至在 Steam 上玩过,在这些场景中都没有使用交换。当然,如果您最终以一种或另一种方式使用完整的 ram 数量,它最终会被使用,但通常您拥有的 ram 越多,您需要的交换就越少。

只有我的 2 美分。


小智 9

不,只要您不使用挂起到磁盘等功能,您就不需要 32 GB。


Mar*_*ied 6

在大多数情况下,我会说你根本不需要任何东西。也许如果您编辑非常大的图像文件,或其他需要大量内存的应用程序,您可能需要一些。

我从来没有在我的系统上看到任何使用过的,类似于你的。事实上,有一次,我不小心将其禁用了一两个星期,从未发现任何问题。但是我仍然为我的交换驱动器保留了大约 5GB,主要是因为我有超过 1TB 的可用空间,并且没有按原样使用所有空间。

  • 如果您使用休眠,这可能是拥有足够交换空间来保存机器状态的一个很好的理由。我猜你永远不会需要超过可用内存的数量,除非你当时已经使用了足够的交换空间。 (2认同)

roa*_*dmr 5

如果您使用休眠模式,则可以安全地使用与您的 RAM 数量一样多的交换空间。

有关交换量的一般经验法则,请阅读此处:

https://help.ubuntu.com/community/SwapFaq

在您的情况下,我会说 4 GB 足以匹配您的 RAM。