有很多方法可以计算出机器中有多少交换使用。常见建议使用基于 RAM 的公式,例如 2 x RAM、1.5 x RAM、1 x RAM、.75 x RAM 和 .5 x RAM。很多时候,公式会根据 RAM 的数量而变化(因此具有 1GB RAM 的盒子可能使用 2 x RAM 交换(2GB),而具有 16GB 内存的盒子可能使用 0.5 x RAM 交换(8GB)。
Amount of RAM in the system Recommended swap space Recommended swap space
if allowing for hibernation
--------------------------- ---------------------------- ---------------------------
2GB of RAM or less 2 times the amount of RAM 3 times the amount of RAM
2GB to 8GB of RAM Equal to the amount of RAM 2 times the amount of RAM
8GB to 64GB of RAM 0.5 times the amount of RAM 1.5 times the amount of RAM
64GB of RAM or more 4GB of swap space No extra space needed
原表:
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
有很多方法可以计算出机器中有多少交换使用。常见建议使用基于 RAM 的公式,例如 2 x RAM、1.5 x RAM、1 x RAM、.75 x RAM 和 .5 x RAM。很多时候,公式会根据 RAM 的数量而变化(因此具有 1GB RAM 的盒子可能使用 2 x RAM 交换(2GB),而具有 16GB 内存的盒子可能使用 0.5 x RAM 交换(8GB)。
要考虑的另一件事是盒子将用于什么。如果您要在盒子上运行大量并发运行的进程,但其中很大一部分会在一段时间内处于空闲状态,那么添加额外的交换是有意义的。如果您要运行少量关键进程,那么添加额外的交换是有意义的(这可能看起来违反直觉,但我会在一分钟内解释)。如果您将一个盒子作为桌面运行,那么添加额外的交换是有意义的。
至于你是否应该包括交换,是的,你应该。除非您真的知道自己在做什么,并且您确实有充分的理由,否则您应该始终包含交换空间。
看,Linux 内核的工作方式,交换不仅仅在你用尽所有物理内存时使用。Linux 内核将获取不活动(休眠)的应用程序,并在一段时间后将应用程序移至实际内存中的交换。结果是,当您需要该应用程序时,在将应用程序的内存从交换区读回 RAM 时,会出现短暂的延迟(通常只有一两秒)。这通常是一件好事。
这允许您将不活动的应用程序置于“睡眠”状态,让您的活动应用程序可以访问额外的 RAM。此外,Linux 将使用机器上任何可用的(未分配的)RAM 作为磁盘缓存,使大多数(慢速)磁盘活动更快、响应更快。交换非活动进程可为您提供更多磁盘缓存,并使您的机器整体速度更快。
最后,让我们面对现实吧,磁盘空间很便宜。真的很便宜。根本没有充分的理由不刷(相对)一小块空间进行交换。如果我在一台机器上运行 2GB - 4GB 的 RAM,我可能会将我的交换空间设置为至少等于 RAM。如果它小于 2GB 的 RAM,那么我仍然会选择至少 2GB 的交换空间。
更新:作为一个很好的评论提到(我忘了包括),如果您正在运行可能想要置于“休眠”模式(挂起到磁盘)的笔记本电脑或台式机,那么您总是想要至少一样多交换,因为你有记忆。交换空间将用于在计算机“休眠”时存储 RAM 中的内容。
Red Hat建议具有大量内存的服务器使用以下公式:
如果您的系统有 1 GB 内存,那么您的交换空间将是 2 GB,对于 16 GB,它将是 18 GB。
迟到的答案,我认为所选答案中几乎涵盖了这一点,但是@ssapkota在这里提供的答案中有一些很好且易于理解的信息(复制/粘贴在下面)。
这是 RedHat 的一个非常好的建议:推荐的系统交换空间
同一链接的摘录:
当前表格(截至 2012 年 12 月):
原表:
这在很大程度上取决于你用它做什么。在适当的工作负载下,您实际上不需要任何交换空间,无论您有 16MB 还是 16384MB 的 RAM;事实上,大多数嵌入式 Linux 设备都没有任何设备运行(它们会换成什么?)
考虑到 RAM 价格,您可能不会将交换用于主动计算。那么,还剩下什么?
(2) 和 (3) 很大程度上取决于工作量。在我的桌面上,我可以轻松地在 (2) 上使用 4GB+,而不是让 vims、xterms 等在其他桌面上运行。
在我运行的大多数服务器上,几乎没有任何东西被换出,而且 1-2GB 的交换空间(不管 RAM 大小)似乎还可以。
好吧,这取决于您计划运行哪些服务和应用程序。您可以使用free -m查看您的内存使用情况,并随着时间的推移相应地调整您的交换分区。
这是关于该主题的有趣讨论。就个人而言(并且在阅读了该讨论之后)我仍然会留下大约 1 GB 的空间用于交换。
我不能直接与 Debian 交谈,但我知道当你的 RAM 超过 2 GB 时,原来的 2xRAM 等式会发生变化,通常会下降到 1xRAM。我认为一旦你达到 16 GB RAM,建议再次降低到 .75xRAM。
当然,我发现 Solaris 确实如此,并且实际上是用于 Oracle 安装的指标,因此 YMMV 取决于您将在那里运行的应用程序。
我总是做与 RAM 一样多的交换(至少)。以防万一有一天我想使机器休眠。可以使用更少,但也可以不使用。
现在硬盘空间很便宜,因此我会毫不犹豫地放弃交换空间。
当您会立即耗尽内存时,交换空间可以用作“填充”。
当一个进程消耗了所有可用的 RAM,然后一些机器将运行非常缓慢,但您通常能够恢复。也更容易看出是哪个进程导致了问题。
多年来,我一直遵循这样的规则:对于 Windows 机器,交换空间与 RAM 一样多……在 Novell 上,如果我们有更多的打印机,我们会将交换空间调得更高……对于 linux,我的规则和实践是 1GB交换您拥有的每 2GB RAM。并且您将它放在磁盘的前面,以便更快地访问它。
如果是 LAMP 服务器,则 1/2 规则生效。
里程将根据应用程序和 GUI 使用情况而有所不同。
我创建 1GB 交换并在第二次使用它时购买更多 RAM。你真的不需要在现代计算机上进行交换,RAM 很便宜。