你有太多交换吗?

我只是想知道你是否可以有一个太大的交换分区。 如果是的话, 什么时候交换分区太大了? 如果交换分区太大(即使我有足够的磁盘空间),有什么缺点/不良影响?

如果不是,拥有超过建议的交换空间有什么好处?

没有

乍一看,你不能有太多的交换,因为你可以看到交换作为增加RAM的一种方式。 实际上它不会增加 RAM,它只是假装:如果你有8 GB的实际RAM和交换空间,比如配置24 GB,那么你的程序可以分配和使用最多8 + 24 = 32 GB的内存这听起来不错。

如果您运行的应用程序有内存泄漏或者没有真正用于运行8 GB内存(例如,考虑video编辑),那么这些应用程序将开始使用该交换空间,并且交换速度很慢。 这些应用程序正在使用的交换空间越多,系统就越忙于将内存移入和移出磁盘。 这将大大降低整个系统的响应速度,并导致糟糕的用户体验。

最终 – 当交换空间耗尽时 – 一些应用程序将面临内存不足的情况并被内核的OOM_Killer杀死 。

来自维基 :

现代计算机中的典型OOM情况发生在操作系统无法创建更多虚拟内存时,因为它的所有潜在后备设备都已填满。

结论

因此,拥有太多交换空间的一个缺点是:您拥有的越多,OOM情况发生的时间越晚,您将遇到滞后和无响应系统的时间越长。

另一个明显的缺点当然是浪费磁盘空间,但现在可能并不那么重要。

除了磁盘空间不足之外,你不会感到任何其他缺点,我认为现在大多数系统中2m ram数量的概念已经过时了。 我通常建议在笔记本电脑中使用相同大小的ram作为交换内存,但为了让你有机会hibernate你的电脑而不会因为RAM的易失性而丢失任何数据。

我考虑使用超过1倍大小的RAM用于交换分区的唯一情况是您认为要在短时间内升级RAM大小。 或者,如果您打算使用一个系统,您将在某个缓存中存储在同一时刻未使用的程序使用的内存量。

希望我的观点足够明确,我再说一遍,我认为你不会因为有太多的掉线记忆而遇到任何问题。

祝你今天愉快!

大型交换空间没有直接的缺点。 通过内核管理的方式,交换空间量的增加超过了足以对性能没有影响或可忽略不计的影响。

“太多”交换空间的唯一缺点是您无法使用该空间进行存储。

什么是SWAP:

当物理内存(RAM)已满时,将使用Linux中的交换空间。 如果系统需要更多内存资源且RAM已满,则内存中的非活动页面将移至交换空间。 虽然交换空间可以帮助具有少量RAM的机器,但它不应被视为更多RAM的替代品。 交换空间位于硬盘驱动器上,其访问时间比物理内存慢。

交换空间可以是专用交换分区(推荐),交换文件或交换分区和交换文件的组合。

交换应该等于2x物理RAM。


好处:

当你的记忆完全填满时提供溢出空间可以从你的高速记忆中移动很少需要的物品让你hibernate

缺点:

占用硬盘空间,因为SWAP分区不会动态resize会增加硬盘的磨损不一定会提高性能(见下文)


当SWAP分区“不帮助”时,“不值得与额外存储相比”:

如果你的硬盘驱动器只有5400转的速度,而你的内存很少,那就说> 2GB。 为什么? 因为系统一直想要访问SWAP分区,所以它最终会变得非常慢。 即使您现在在内存中有空间,SWAP分区中的所有内容都需要移回。 因为系统会变慢,所以分配在SWAP分区中。 这只能通过重启来修复。 这需要一段时间,因为系统需要在关闭之前从SWAP分区中删除所有内容。


**结论:**

如果您希望能够hibernate您的计算机,那么您应该有一个SWAP分区。 此分区的大小应该是已安装内存的大小,另外还有10-25%,以便为已经移入SWAP分区的任何项目留出空间。

如果你只是想要一个小的性能提升(并且你至少有一个7200rpm的硬盘驱动器),那么你可以根据需要添加一个SWAP分区,但除非你的内存少于4GB,否则不需要它。 这个大小可以是你想要的任何东西。 但是我建议将2x RAM作为精确定位。 如果你有enoug存储空间。

如果您有一个5400rpm的硬盘驱动器,那么您不应该仅仅因为瓶颈会使您的计算机变得更糟而创建一个SWAP分区。 但是,如果您绝对想要SWAP,那么您仍然可以使用上面概述的相同大小指南创建分区 – 但是将swappiness值更改为更低的值。



我的看法:

但是,无论如何,如果您使用Ubuntu作为日常使用的主操作系统,我建议使用 2倍大小的RAM。 因为你没有安装Ubuntu只是因为你有一台旧电脑。 但是因为您想将系统用作主操作系统。

而是在需要时购买一些额外的硬件,而不是调整系统分区以保持其运行。 如果您购买游戏,您还要确保您的系统是“最新的”,而不是调整设置使其“可玩”。

您可以更好地拥有一些额外的空间,SWAP,速度,功率,而不是太短或需要稍后resize。 因为你需要SWAP或空间,买了RAM? 或者需要快速购买ram,因为一个内存插槽或插杆坏了。

hibernate真正需要多少SWAP?

当您使用hibernate时,您需要RAM x 2作为SWAP大小,这是一种误解。 交换大小需要使用的RAM大小不是已安装的RAM 。 通常,交换大小需要是已安装RAM的2/5。 要找出使用所需的最小RAM量:

$ cat /sys/power/image_size 3153907712 

在这个8 GB的RAM机器上,需要至少3 GB才能进行hibernate。

您可以调整image_size的值以获得较小的交换大小,并存在失败风险。 您可以调整它以获得更大的交换大小,并可能加快hibernate速度。

参考: https : //wiki.archlinux.org/index.php/Power_management/Sus​​pend_and_hibernate


1995年16 MB RAM,2018年16 GB RAM的不同规则

在你拥有16 MB Ram的时候,你的720 MB硬盘驱动器上的32 MB交换x 2是有道理的。 这篇1995年“华盛顿邮报”的文章中有一点RAM和HDD历史。

23年后,1995年的一些技术文章(虽然我没有找到)可能会误导新用户。 然而,我找到了一篇2007年的文章,建议SWAP = RAM x 2 。

早在1995年,7 MB MB硬盘中的32 MB Swap占硬盘的4%。 实际上,交换分区可能在1995年已经被大量使用。今天在2018年,256 GB SSD上的16 GB RAM x 2 32 GB SWAP与13%的SSD不同。 今天我的8 GB SWAP分区根本没有被使用,除非我在测试OOM-Killer时强制它填满它: 谷歌浏览器会占用我的内存到它导致我的计算机冻结到接近停止的程度。 我该怎么做才能防止这种情况发生? 。

确实存在开销,但非常小; 对于每个磁盘上的“页面”,都有一个引用计数器,并且每个交换区域都有一些结构; 这是在内核内存中,因此无法分页。 根据架构的不同,每4 GB介于2到16 MB之间。 其余的是相当动态的,因此取决于使用情况。

所以你可以有足够的,但请记住,分页地址空间本身会对RAM造成一些开销,最重要的是交换页面会有一些跟踪,因此它不能扩展到很远,文件系统效率更高因为vfs可以将结构信息卸载到磁盘(因为硬件限制,通常不能交换页表),而不是处理较大区域时的大交换区域。

我想不出任何其他的缺点,OTOH交换太少会导致碎片化,这意味着更多的追求。 如果有很多,在某一点之后也没有任何改进。

交换通常是最后的资源(除了hibernate),所以如果你有超过4GB的内存,你可能不会因为拥有超过RAM而受益,有时甚至像RAM那么大(想想64 GB)。