如何确定交换空间大小

我只是想确认一下Swap分区的大小应该是多少。很多地方都说,交换分区的大小应该是内存大小的两倍。还有人告诉我,它不应该超过8 GB。如果内存大小的两倍超过了8 GB,那么Swap分区应该有多大?

5我投票支持重新开放这个问题,因为现有的答案都没有解释任何原因,并且如果我们考虑到1GB或更高的RAM,它们已经过时了,而这个则提供了解答。 - David Foerster
1@Fabby 我正在移除那个陈旧的横幅 - 当这个问题再次关闭时,将会有一个新的适当的重复通知。 - muru
4个回答

以下文本来自nixCraft页面 Linux:您应该使用两倍于交换空间的RAM吗?(请点击链接并阅读源文获取更多信息) 请注意,nixCraft页面引用了据称来源于OpenBSD FAQ的文字,但当前文档中没有匹配的文字;然而,这可能是2006年曾经存在的内容(所以2倍RAM规则在10多年前就已经过时了)。
胡说八道的规则:服务器的主系统RAM大小的两倍
根据OpenBSD FAQ:
很多人遵循一个老生常谈的规则,即交换分区应该是主系统RAM大小的两倍。这个规则是胡说八道的。在现代系统上,这是非常大的交换空间,大多数人更喜欢他们的系统从不进行交换。你不希望你的系统因为RAM+交换空间不足而运行出问题,但通常情况下,你更愿意在系统中有足够的RAM,以免需要进行交换。
来自nixCraft页面的更多信息: Red Hat建议在RHEL 5中进行以下设置: 实际上,系统所需的交换空间量并不是取决于其拥有的RAM数量,而是取决于正在运行在该系统上的内存工作负载。只要匿名内存(没有文件或设备支持的内存映射:从操作系统堆栈和堆中获得的内存)和System V共享内存的总和小于大约3/4的RAM数量,Red Hat Enterprise Linux 5系统将可以完全不使用交换空间运行。在这种情况下,系统将简单地锁定匿名和System V共享内存到RAM中,并使用剩余的RAM来缓存文件系统数据,因此当内存耗尽时,内核仅回收页面缓存内存。
考虑到: 1. 在安装时配置交换空间时,没有简单的方法来预测工作负载所需的内存。 2. 系统拥有的RAM越多,它通常需要的交换空间就越少,更好的交换空间[可能沿着this recommendation for CentOS Linux 7.x and RHEL 7]: Recommendation for Swap Space in RHEL/CentOS 7 而nixCraft页面的结论如下:
结论
如果Linux内核一次性使用超过2GiB的交换空间,所有用户都会感到压力。要么增加更多的RAM(推荐),要么将其移动到更快的存储设备以改善磁盘I/O。没有固定的规则,每个设置和配置都是独特的。根据您的需求调整值。选择适合您的交换空间大小。
此外,这篇Red Hat文章:我们真的需要在现代系统上使用交换空间吗?(2017年)指出:
我们对大多数现代系统的大小建议是“物理内存的一部分”,例如20%。通过这样做,我们示例中痛苦缓慢的操作阶段不会持续太久,并且OOM(内存溢出)将更早地发生。
当然,有些情况下可能需要不同的行为。如果了解这种行为,那么这样的交换配置也是可以的,或者在没有任何交换空间的情况下运行系统也是可以的。我们也支持这样的系统,但客户应该了解上述情况下的行为。

请描述这个链接。 - N.N.
我刚刚添加了回答者提供的源链接的摘录。@A T:下次请至少添加一个源的摘录或描述。 - Nitin Venkatesh
你知道,在链接的OpenBSD FAQ中并没有这样的段落。 - pqnet
1@pqnet 是的,确实。更新中... - David Tonhofer
如果你在Azure虚拟机上工作(甚至是在家里),请将交换文件放在SSD上。参见什么是Microsoft Azure中的资源磁盘? - David Tonhofer

我所知道的关于交换空间的唯一硬性规则是1倍RAM用于休眠。系统监视器或CLI free命令会告诉您使用了多少特定硬件配置和使用模式的交换空间。我的系统有2GB的RAM,很少使用任何交换空间,我见过的最多也不超过0.4GB。


交换空间不是你想要使用的东西。它是你在万不得已时才会使用的东西,因为交换空间不快,而是非常慢。如果你使用了大约1GB的交换空间,那么系统的响应速度将会非常慢。
交换内存的整个意义在于当可用的物理内存耗尽时,避免系统崩溃。它不是你可以用作额外内存或者你真正想使用的东西,除非你确实非常非常需要。
所以就大小来说,我建议5GB,但如果你正在进行大量占用内存的重型任务,那么可以增加到8GB。但是,如果你开始使用超过1GB的交换空间,请立即终止一些进程,以防止系统崩溃。

通常情况下,你不需要(也不应该)经常使用交换空间,所以说超过8GB似乎有点多。我的台式机上有8GB的RAM和8GB的交换空间,我想我从来没有使用过超过1GB的交换空间。2倍规则对于较小容量的RAM是有道理的,但对于大约6GB以上的RAM来说就有些夸张了。
当然,这取决于你在电脑上做什么...