为什么交换大小应该与RAM相同或更大?

很多人说,如果你有一个2GB的内存,你应该configuration一个2GB或更多的交换。 FWIKhibernate可能需要相同的大小交换才能在断电时保持记忆,但是一般来说,如果你有一个大的RAM,甚至根本不需要交换,不是吗?

对于Linux用户,当您安装Linux时没有交换,安装程序会警告您没有交换装载。 不,我只是不需要它,因为我的内存足够大,对不对?

交换文件不是一个简单的缓冲区 ,当你用完物理内存时, 这是交换文件如何操作的过于简单的观点。 也就是说,只要您100%确信自己在任何时候都不会超过RAM的容量,就可以在没有交换文件的情况下运行。 因为如果你这样做,你的系统崩溃。

国际海事组织,更好地保持页面文件,并保持多久它被系统使用的选项卡。 如果你从来没有经历颠簸,那就不是问题,如果你在颠簸,那么如果你没有运行一个页面文件的话,你可能会遇到一个更严重的问题。

确实,我们现在拥有更多的内存,而且价格便宜。 但是磁盘空间也是如此。 除非你有一个引人注目的磁盘空间限制,否则我build议坚持一个体面的大小交换文件。

如果你觉得事情经常被分页到磁盘,你可以看看把你的swappiness调整得不那么激进。

所有关于交换大小的所谓“规则”从未打算成为规则。 它们是简化的,如果你不知道盒子的RAM使用模式,或者只是不关心优化,可以帮助你猜测一个合适的数字。

随着时间的推移,简化成为了民间传说和“规则”,RAM和磁盘之间的相对成本和延迟差异逐渐改变。 今天,这些规则大部分是最好的。

但是,请注意,问题不是“我可以将所有应用程序保留在RAM中,我不需要交换”。 问题是“我有x RAM,如何最好地利用它,满足运行应用程序,睡眠应用程序和磁盘I / O缓冲的需要”。

OP的问题被标记为“Linux”,我对Linux虚拟内存pipe理(我对Windows和FreeBSD更多的了解)知之甚less,所以我不会在这里提供新的build议。 开始阅读的一个好地方就是Linux 2.6内核开发者关于“swappiness”VM调整参数的讨论。

当你没有交换安装Linux时,安装程​​序会警告你没有交换装载。

这只是安装程序中的硬编码行为,因为交换几乎总是一个好主意。 许多Linux发行版可能需要用于hibernate的交换,但如果需要,可以更改 。

不,我只是不需要[swap],因为我的内存足够大,对不对?

错误。 或者纠正less量的“需要”,在这种情况下严格来说不需要交换,但是你的电脑会更快。 没有交换,所有的程序驻留在RAM中,包括那些不活动的,不会很快执行的程序。 通过交换,不活动的程序可以被交换出去,而物理RAM可以用于更有效率的事情 – 主要是通过磁盘缓冲来伪装磁盘I / O(包括SSD)的实际速度。

如果要控制取消分配磁盘缓冲区和更换应用程序代码之间的内核平衡,那么您需要“swappiness”调整参数,这个参数与上面链接的讨论有关。

各种交换规则的规则(“如果你有内存,就应该交换一样多的内存”,“如果你有内存,就要交换两次交换”),如果我们今天没有这么疯狂的内存,那就更有意义了。

在我看来,在典型的使用过程中太多的交换是完全没有必要的。 如果您的典型使用模式等于典型的桌面使用情况 – 网页浏览,听音乐,看电影等,2 GB的RAM应该是绰绰有余的。 另一方面,如果你偶尔做一些非常耗费内存的事情,例如渲染非常复杂的3D场景,那么交换一下是一个好主意。 Linux内核幸运地支持基于文件的交换 ,所以你可以configuration大量的交换按需而不需要重新分区,如果交换的需要出于任何原因。 尽pipe如此,我还没有尝试从hibernate状态恢复基于文件的交换。

但是很难想象这样一种情况:拥有2 GB的内存和2 GB的交换空间在极限附近运行是一个好主意 – 在这种情况下,大部分时间将花费在等待操作系统交换页面,到磁盘,而不是任何真正的工作将完成。

而在服务器端,你不希望你的服务器永远不会交换。 如果它将一个不常用的进程转换为交换,那么它是可以的,但是如果它需要交换活动进程来存活,那么你就陷入了一个非常麻烦的境地。

以下是“主板支持的最大物理内存大小+ 1MB”的一些因素。

完整的核心转储 如果没有足够的交换处理完整的核心转储,则可能无法诊断某些系统发生混乱。

有些操作系统使用交换空间在系统发生混乱时转储核心。 您(或操作系统的开发人员)可以使用该核心转储来诊断原因。 大多数现代操作系统都会做一个“小型转储”,它比RAM的总量要小得多……但是如果问题很棘手的话,可能需要一个完整的核心转储。

核心转储元数据。 有时还会有less量元数据与核心转储一起进行。 将额外的1M添加到交换大小将覆盖此。

事先准备RAM升级 。 没有安装最大RAM的系统将来可能会升级。 设置交换为此做好准备,而不是试图记住稍后添加更多交换月份(或年)。

对于服务器而言,这比桌面系统更不重要,因为您永远不想hibernate一台服务器。

但是,从500GB的硬盘中分配2GB比购买更多的内存更便宜(每千兆字节6美分)。 “足够大”和“太多”的区别在于架构不再支持它。

请注意,由于2.6内核,您也可以使用交换文件 ,所以你可以完全避免交换,直到你有一些使用分析来certificate它。

为了从常见问题中解释出来,需要更多的内存交换才能使暂挂磁盘正常工作。

Ubuntu / Lucid的发行说明也提到这一点,因为安装程序不够明亮,无法为自己工作。

否则,你并不需要太多,但硬盘空间是便宜的,所以在32位盒上达到2GB的限制,这不是什么大问题。