我有16GB的RAM。 我需要32GB交换吗?

我读了很多地方,交换空间的经验法则是物理RAM的两倍。 但是,32 GB确实看起来很多。 我需要那么多吗? 有这么大的物理RAM,我是否需要它?

这完全取决于您打算如何处理机器。 例如,如果它是一个Sap服务器然后是,我会添加32gb交换(我们有工作的盒子128gb ram和32gb交换)。 如果您正在操纵大量的图片和video,那么进行一点交换是有意义的。 32gb可能是矫枉过正。

但是我不会说零交换。

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

任何在不问你实际使用计算机的情况下说“你不需要交换”的人都会做出假设。 虽然你可能很少使用你的计算机来吃RAM,但在做出你不需要“交换”的轻率判断之前,最好先询问你计划用它做什么的问题。 在我的愚见

以下是RedHat的一个非常好的推荐: 推荐的系统交换空间

来自同一链接的摘录:

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

当前表格(截至2017年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 At least 4 GB 1.5 times the amount of RAM 64GB of RAM or more At least 4 GB Hibernation not recommended 

原表:

 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 

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

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

这个FAQ提到了重要的一点,这里没有人提到,这是(强调我的)

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

所以, 交换不只是为了冬眠! 此活动(更换未使用的页面)在某些情况下可能是有益的,而在其他情况下则是有害的。 有益的是因为它可以释放内存以供系统在其他地方使用,但是当交换过于激进时会有害,并且会切换你实际想要的页面。 在桌面系统上尤其如此,在这种情况下,应用程序可以长时间处于空闲状态,但是用户在将其恢复生命时仍希望立即获得性能。 对此有多激进的控制被称为swappiness

Ubuntu交换常见问题解答在浅谈什么是swappiness以及如何更改它? Ubuntu系统的默认值为60,而FAQ建议台式机的值为10。

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

可能不是。 如果您打算hibernate计算机(挂起到磁盘),那么您至少需要16 GB。 如果你不会hibernate,只需几千兆字节进行交换(最多4-8个)

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

对于我所看到的使用4GB ram 3年的情况,Ubuntu的交换使用量大约为60MB,但仅限于执行一些非常密集的任务。 几周前,我开始使用一台拥有16GB内存的PC,交换使用率一直保持在0%。 我做过多次编译,video渲染和其他密集型任务。 掉期从未发生变化。 甚至没有1KB的变化。

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

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

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

如果它有助于家庭桌面决策,在4年多来更新这个答案后,我使用了16GB,32GB和现在64GB的RAM。 仅使用128MB交换测试显示我不需要更大的交换,除非我想要hibernate。 我已经在它们上面使用了云环境,lxc,virtualbox,wine,你可以命名它。 我用openshot,kazam,handbrake,audacity渲染了video。 我使用过gimp,blender,Inkscape甚至是完整的LibreOffice套件。 我甚至玩过蒸汽,在这些情况下都没有使用交换。 当然,如果你最终以这种或那种方式使用完整的ram数量,它最终会被使用,但一般来说你拥有的ram越多,你需要的交换就越少。

只需2美分。

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

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

在我的系统中,我从未见过任何用过的东西,与你的系统相似。 事实上,有一段时间,我意外地禁用了一两个星期,从未发现任何问题。 但我仍然为我的交换驱动器保留大约5GB,主要是因为我有超过1TB可用,并且不使用所有空间。

如果你的ram高于1GB,那对ubuntu来说通常就足够了。 “Swap = RAM x2”规则适用于具有256或128mb ram的旧计算机。

因此1 GB的交换通常足以容纳4GB的RAM。 8 GB太多了。

如果你使用hibernate,那么与你的RAM量一样多安全交换是安全的。

有关交换多少的一般经验法则,请阅读:

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

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

如果你使用hibernate,你的交换应该至少与物理ram相同。

你只需要交换,如果你想使用hibernate,那么它就是硬盘上的空间浪费。

我有一台4GB RAM和Ubuntu 16.04的笔记本电脑。 启动后它消耗大约1GB的RAM,即使然后Inkscape(例如)也不会运行(系统监视器显示超过50%的可用RAM)。 Inkscape冻结在我应用交换文件之后,它按预期运行,即使没有使用任何单个字节的交换)。 Inkscape正在运行 所以我建议使用交换分区(或交换文件)。 关于它的大小,你可以使用david6规则。

来自Ubuntu的SwapFaq :

为什么我需要交换?

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

hibernate(挂起到磁盘)hibernatefunction(挂起到磁盘)在关闭计算机之前将RAM的内容写出到交换分区。 因此,您的交换分区应至少与RAM大小一样大。 目前在Ubuntu中使用的hibernate实现swsusp需要交换或挂起分区。 它无法在活动文件系统上使用交换文件。

不可预见的情况不可预见的事件可能会发生(一个程序变得疯狂,一些行动需要比你想象的更多的空间,或任何其他不可预测的事件组合)。 在这些情况下,交换可以给你一个额外的延迟,以弄清楚发生了什么,或完成你正在做的工作。

优化内存使用率由于机械硬盘驱动器比RAM慢得多(SSD – 固态硬盘 – 存储不像物理驱动器那么慢,但仍然比RAM慢),当你需要一个文件时(无论是像video这样的数据文件, Linux内核可以将文件读入RAM并将其保存在那里,以便下次需要时,它已经在RAM中,数据访问速度更快。 加速磁盘读取的RAM部分称为“缓存内存”。 你会发现它们在响应性方面有很大的不同。 Linux内核自动将程序保留的RAM(但并未真正使用)移动到交换中,这样它可以更好地扩展缓存内存。

优化交换性能由于交换空间使用磁盘设备,这可能会导致任何使用交换空间的系统出现性能问题,因为系统本身也可能在交换操作所需的同时使用相同的磁盘设备。 减少此问题的一种方法是在不同的物理驱动器上具有交换空间,以便减少或消除对该资源的竞争。

我需要多少交换?

对于小于1GB的物理内存(RAM),强烈建议交换空间作为基本最小值,应等于RAM的数量。 此外,由于收益递减,建议交换空间最大为RAM数量的两倍,具体取决于系统可用的硬盘空间量。

对于更现代的系统(> 1GB),您的交换空间应至少等于物理内存(RAM)大小“如果您使用hibernate”,否则您需要至少一轮(sqrt(RAM))和最大值两倍的RAM量。 拥有比实际使用的更多交换空间的唯一缺点是您将为其保留的磁盘空间。

“递减收益”意味着如果你需要更多的交换空间而不是你的RAM大小的两倍,你最好添加更多的RAM,因为硬盘驱动器(HDD)访问比RAM访问慢大约10 3,所以需要1秒,突然需要超过15分钟! 在快速固态硬盘(SSD)上还有一分钟……

示例方案

  RAM(GB) No hibernation With Hibernation Maximum 1 1 2 2 2 1 3 4 3 2 5 6 4 2 6 8 5 2 7 10 6 2 8 12 8 3 11 16 12 3 15 24 16 4 20 32 24 5 29 48 32 6 38 64 64 8 72 128 128 11 139 256 

我想你反过来了。 SWAP推荐 ,你需要~16GB。 因此SWAP应该是实际RAM大小的1/2。 但仍然有很多空间。 取决于你需要它。 我会说,如果你不使用“hibernate”,如果你能负担得起磁盘空间的话,请保持~4GB到~8GB左右。 由于你有16GB,我假设你可能正在使用一台需要强大资源的计算机……所以也许有16GB到32GB的SWAP可能也是有益的。

我有2GB RAM和1GB SWAP。 我对它做得很好,但这只是我的看法。 看看其他评论/建议,看看他们说了什么。

我在这里找不到引用的引用,但是如果你要使用一个需要在RAM中交换整个数据的应用程序,你至少需要“RAM大小+ 128 MB”或“1.25倍RAM大小”(i忘了哪一个是正确的)假设你有超过2 GB的RAM。 如果RAM为2GB或更少,建议将两倍的RAM大小作为swap.I遵循我以前的IBM AIX组织中基于IBM文档的建议。 我相信这对大多数* nix都适用,因为交换的使用是安全地从RAM移动数据,以防RAM不足以处理要加载到内存中的数据。 ‘free’命令可用于评估实际使用的交换量。

我有一台Mac笔记本电脑,我放了几个月。 虽然比Windows好得多,但内存确实很容易,特别是对于你的浏览器,如果你继续保持它。 所以最终,记忆充满了。 现在,如果你有其他人注意到的交换,你可以生存,注意并杀死一些东西。 但更重要的是,如果你有交换,一些页面会被换掉,你可以继续。

因此,如果您计划长时间离开机器,交换是一种从僵尸垃圾中释放内存的便捷方式。 当然,用3gb填充16g需要更长的时间,但它仍然很好。 为此,4Gb会这样做。

如果是笔记本电脑,那么至少保持交换等于RAM的数量,以完全允许hibernate。 即使是台式机,我仍然可以保持相当于RAM的数量,但这只是我; 它在桌面上几乎没用。

牢记这一点 –

对于RAM少于2GB的系统,通常应将交换空间大小调整为大约2x主内存,如果有更多内存,则应将大约1x主内存大小调整

因此,如果你有4 Gb ram,除非冬眠,否则你永远不需要交换
所需的交换量约为3 – 3.5 Gb, 不超过此值
所以使用你的常识,不要浪费磁盘空间

如果您正在构建非常大的文件,例如,如果您正在笔记本电脑上构建机器翻译系统(是的,为什么您要这样做?我可以说我的教授正在制作我;-))答案很清楚是的,实际上在这一刻我很遗憾没有让它变成32GB交换….

对于办公室工作和互联网的Ubuntu的随意使用,你永远不会使用甚至2 GB的交换,但实际上没有明确的答案,这完全取决于你将在你的计算机上做什么…

信息过多,意见分歧。

我建议的Ubuntu桌面指南:

  amount of RAM recommended swap with hibernation ---------------- ---------------- ---------------- less than 4GB 2x RAM size 3x RAM size up to 8GB 4GB 2x RAM size up to 16GB 4GB 1.5x RAM size 16GB or more 4GB No extra needed 

似乎没有人提到另一个原因是,当你开始耗尽内存时,显着的交换空间是让系统显着减慢而不是无法运行程序。 如果你有一个负载均衡器在前面重定向失败你可能想保持交换小(比如1GB),如果你想让程序先减速,那么我会考虑4GB +平方根的内存大小,如果你想要它们在事情死亡之前真的慢下来,然后保持1.25倍的内存大小(只要不耐烦的人不首先放弃 – 这对于后台工作更合适)。

我为我的开发和生产机器配置1GB作为标准,然后它们有多少或几乎没有真正的内存,它们足以编译我想要的所有程序,并交换几乎从未使用过的程序来使用释放内存用于磁盘缓冲。

相比之下,我的32GB笔记本电脑上有64GB的掉线,这有点过分,但我想确保它总是保持工作,即使速度很慢,我知道我将运行多个内存饥饿的虚拟机。 一个意想不到的效果是当你有32GB +内存范围然后从hibernate状态恢复(重新加载32GB内存)明显慢于冷启动。

不,你绝对不需要32GB。 作为桌面系统的一项规则,我会说你的交换应该介于4GB物理RAM +几GB之间 。 因此,对于16GB物理RAM,可能是4GB到18GB的交换。

您将需要交换到交换空间的内容大致等于驻留的应用程序使用的物理RAM的数量 – 即,在您使用它们时保持运行的系统服务和应用程序(与运行一次的任务相反)然后退出)。 在桌面系统上,假设您可以在处理其他内容时打开浏览器,文字处理器,电子邮件程序和图形或video编辑器。 这些可能很容易占用超过2GB,可能超过4GB。 所以也许6GB的交换是合适的。

作为一般规则,拥有比你需要的更多的GB也没有什么坏处。 如果你有大量的RAM,通常不会使用交换,但是当某个进程使用过多的数据并且你开始变低时,它会有所帮助,并且可以防止系统终止进程。

注意:如果你想使用OShibernate,你需要所有16GB,但现代计算机不会从hibernate中获益。 如果你有一个快速的SSD,启动可能比从hibernate恢复更快或更快,现代计算机使用可忽略的能量,而在睡眠模式,hibernate的能量使用受益不是一个重要因素。