2-4GB系统上有多少SWAP空间?


53

我应该如何决定在具有2-4 GB RAM的新Linux机器(Debian)上进行交换的大小?我真的需要交换空间吗?


3
5年后,2-4 GB不再是真正的高内存。
FIFI Finance

@KasperSouren不,不是。在当时是相当数量的。
C. Ross

Answers:


54

您可以通过多种方法来计算一台计算机中有多少次交换使用。常见建议使用基于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 RAM的盒子可能使用0.5x RAM交换(8GB)。

要考虑的另一件事是盒子将用于什么用途。如果您要在盒子上运行大量并发运行的进程,但是其中很多进程在一段时间内处于空闲状态,那么添加额外的交换是有意义的。如果您要运行少量的关键流程,那么添加额外的交换是有意义的(这似乎是违反直觉的,但是我会在稍后解释)。如果您将盒子作为桌面运行,那么添加额外的交换是有意义的。

至于是否应该包括交换,是的,应该。除非您确实知道自己在做什么,并且确实有充分的理由,否则应该始终包含交换空间。

看,Linux内核的工作方式,交换不仅是在用尽所有物理内存时使用的。Linux内核将处理处于非活动状态(休眠)的应用程序,并在一段时间后将应用程序移至实际内存中进行交换。结果是,当您需要该应用程序时,会有短暂的延迟(通常只有一两秒钟),而应用程序的内存从交换区读回RAM。这通常是一件好事。

这使您可以将不活动的应用程序置于“睡眠”状态,从而使活动的应用程序可以访问其他RAM。此外,Linux会将计算机上任何可用的(未分配的)RAM用作磁盘缓存,从而使大多数(慢速)磁盘活动更快,响应速度更快。交换不活动的进程将为您提供更多的磁盘缓存,并使您的计算机总体上更快。

最后,让我们面对现实,磁盘空间很便宜。真便宜。根本没有任何理由不擦拭(相对)小的交换空间。如果我在一台计算机上运行2GB-4GB的RAM,则可能会将交换空间设置为至少等于RAM。如果少于2GB的RAM,那么我仍然会进行至少2GB的交换。

更新:作为一个很好的评论(我忘了包括),如果您正在运行一台笔记本电脑或台式机,而您可能希望将其置于“休眠”模式(挂起到磁盘),那么您总是希望至少有那么多交换内存。交换空间将用于在计算机“休眠”时将其内容存储在计算机中。


22
很好的答案,但您只忘记了一件事。如果是台式机或笔记本电脑,请确保交换空间至少与您拥有的RAM一样大,以便可以使计算机休眠。这样可以节省要交换的RAM。
Sander Marechal

4
很棒的帖子。桑德(Sander)击败了我,我唯一要添加的东西。但是,如果有多个驱动器,则将交换放置在没有其余活动文件系统的驱动器上可以提高性能,因为不会有太多冲突。
2009年

正如我去年夏天发现的那样,如果您正在运行Java,则需要有足够的交换空间
warren

如果用户的RAM量比正常运行时间100%的台式计算机上的实际使用量(16GB / 32GB)大得多(无休眠),那么您是否仍建议请求将进程放入SWAP?在我看来,将所有内容保留在RAM上将是有益的,除非您接近其容量。
EarthmeLon 2012年

1
@earthmeLon-我建议还是有一点交换。如今,磁盘又大又便宜,因此可以交换的几GB磁盘空间的损失可以忽略不计。拥有一些交换空间可以为您提供保险,以防万一某些东西吞噬了更多的RAM。
Christopher Cashell


12

较晚的答案,我认为所选的答案已经涵盖了大部分内容,但是@ssapkota 在此处提供的答案中有一些良好且易于消化的信息(复制/粘贴在下面)。

这是RedHat的一个很好的建议:推荐的系统交换空间

来自同一链接的摘录:

在过去的几年中,建议的交换空间数量随系统中RAM的数量线性增加。但是,由于现代系统中的内存量已增加到数百GB,因此现在人们认识到,系统所需的交换空间量是该系统上运行的内存工作量的函数。但是,鉴于交换空间通常是在安装时指定的,并且可能很难预先确定系统的内存工作量,因此我们建议使用下表确定系统交换。

当前表格(截至2012年12月):

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 

8

这很大程度上取决于您正在使用它。有了适当的工作负载,实际上您不需要任何交换空间,无论您有16MB还是16384MB的RAM。实际上,大多数嵌入式Linux设备运行时都没有任何设备(它们将交换到什么?)

考虑到RAM的价格,您可能不会使用swap进行主动计算。那么,还剩下什么呢?

  1. 在台式机上,交换空间用于磁盘挂起。此交换空间需要大约1×RAM,具体取决于内存内容压缩的程度。
  2. 允许从RAM中删除不活动的任务,以便为磁盘缓存腾出更多空间
  3. 相同,但允许活动进程代替堆/堆栈使用它

(2)和(3)在很大程度上取决于工作量。在我的桌面上,我可以轻松地在(2)上使用4GB +,而无需在其他桌面上运行vims,xterms等。

在我运行的大多数服务器上,几乎没有交换掉任何东西,并且1–2GB的交换空间(与RAM大小无关)似乎还可以。


如果您运行任何利用JVM的东西,那么也会使用交换空间:如果您运行的是Java,请不要担心并忘记分配交换空间!
沃伦

@warren:我有Tomcat实例,每个实例都超过3GiB,但没有使用交换(并且一个实例正在使用大页面,因此无法交换)。不知道你在说什么。
derobert

去年夏天,我遇到了与最小和最大内存设置有关的JVM半模糊错误(antipaucity.com/?p=984)。TL; DR-每次JVM从操作系统请求更多内存时,它都会写出自己要交换的内容,获取其新的内存块,然后将自身读回RAM,以便其内存是连续的
Warren

@warren:好的,我在64位上运行OpenJDK,而Xmx和Xms相同。但是我不确定java将如何强制自己进行交换,唯一的syscall关闭将是madvise,但这不会失败...该错误涉及在垃圾回收期间内存不足。当然,添加交换可以防止这种情况,但是添加RAM也会如此。也许是由于使用PAE的32位?
derobert

它与64位JVM发生,太:如果你有XmsXmx没有设置为相同的值,它会严重咬你:因重大事项我们两个+星期,直到我们终于跟踪它
沃伦

4

好吧,这取决于您计划运行哪些服务和应用程序。您可以使用free -m查看内存使用情况,并随时间调整您的交换分区。

这是关于该主题的有趣讨论。就个人而言(阅读该讨论之后),我仍然会留出大约1 GB的空间用于交换。


2

我无法直接与Debian对话,但是我知道当您获得2 GB以上的RAM时,原始的2xRAM方程式会发生变化,通常会降至1xRAM。我认为一旦达到16 GB RAM,建议就会再次降低至.75xRAM。

当然,我发现对于Solaris来说确实如此,并且实际上是用于Oracle安装的度量标准,因此YMMV取决于您将在其上运行的应用程序。


2

我总是进行(至少)与RAM一样多的交换。以防万一我想让机器休眠。可以减少工作量,但也不能减少工作量。

如今,HDD空间很便宜,因此,我会毫不犹豫地放弃交换空间。


2

如果您不立即使用内存,则交换空间可以用作“填充”。

当某个进程消耗了所有可用的RAM,然后其中的一些机器运行非常缓慢时,您通常可以恢复。也将更容易查看导致问题的进程。


2
这是一把双刃剑:在我的家用PC上,当我使用Firefox 2.x时,我删除了swap,因为它正在慢慢消耗所有内存,并且当计算机进行交换时,它变得完全不可用;没有交换,Firefox进程只是被内核关闭了:)
wazoox

1

多年以来,我一直遵循以下规则:对于Windows计算机,交换空间与RAM一样多...在Novell上,如果我们有更多打印机,我们将调高交换空间...对于Linux,我的规则和实践是1GB每拥有2GB RAM交换一次。然后将其放在磁盘的前面,以便更快地访问它。

  • 如果它是邮件/垃圾邮件网关,则我使用两次交换到RAM
  • 如果它是*服务器,那么我根本不使用swap
  • 如果是LAMP服务器,则1/2规则生效。

  • 里程会因应用程序和GUI使用情况而异。


实际上,我认为可以最快速地访问磁盘中间的交换。
Eddie

0

我创建了1GB的交换空间,并在第二次使用内存时购买了更多RAM。您实际上并不需要在现代计算机上进行交换,RAM非常便宜。


0

您正在使用该系统做什么?我个人不使用任何交换。如果任何东西使用令牌512MB或其他东西,那么如果驻留在设备上但长时间不活动,则可以将其放入磁盘。


0

我只使用一个小的令牌交换(通常为256 MB,但我什至完成了64 MB),因为使用零交换配置系统需要特殊配置。

磁盘空间很便宜,但是很便宜。系统开始交换后,性能为零。RAM不再那么昂贵。

相信我,购买稍微慢一点的处理器并购买更多RAM。2.8 GHz而不是3.0 GHz将至少为您节省足够的钱来购买另外2 GB的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.