很多人说,如果你有 2GB 的 RAM,你应该配置 2GB 或更大的交换空间。休眠可能需要相同大小的交换空间来在断电时保留内存,但一般来说,如果你有大 RAM,你甚至根本不需要交换空间,不是吗?
对于 Linux 用户,当您安装没有交换分区的 Linux 时,安装程序会警告您没有交换分区挂载。不,我不需要它,因为我的 RAM 足够大,对吗?
答案1
交换文件是不仅仅是一个缓冲区当您的物理 RAM 用完时,会出现什么情况。这是对交换文件如何运作的过于简单的看法。也就是说,您可以在没有交换文件的情况下进行操作,只要您 100% 确信在任何时候都不会超出 RAM 的容量。因为如果您这样做,您的系统就会崩溃。
我认为,最好保留页面文件,并密切关注系统使用页面文件的频率。如果你从未出现过抖动,那就不是问题,如果你出现抖动,那么问题可能比你根本没有运行页面文件时更严重。
我们现在确实有更多 RAM,而且价格便宜。但磁盘空间也是如此。除非您的磁盘空间有限,否则我建议坚持使用大小合适的交换文件。
如果你觉得内容被分页到磁盘太频繁,你可以考虑调整你的交换性变得不那么激进。
答案2
所有所谓的关于交换大小的“规则”都不是规则。它们只是简化版,是一些小指导方针,如果您不知道机器的 RAM 使用模式或只是不想进行优化,它们可以帮助您估算出一个合适的数字。
随着时间的推移,简化变成了民间传说和需要遵守的“规则”,RAM 和磁盘之间的相对成本和延迟差异逐渐发生变化。如今,这些规则中的大多数充其量是毫无意义的。
但是,请注意,问题不是“我可以将所有应用程序保留在 RAM 中,我不需要交换”。问题是“我有 x RAM。我如何最好地利用它,以满足正在运行的应用程序、休眠的应用程序和磁盘 I/O 缓冲的需求?”。
楼主的问题标签是“Linux”,而我对 Linux 虚拟内存管理了解不多(我对 Windows 和 FreeBSD 了解较多),所以我不会在这里提供建议的新指南。一个不错的开始阅读的地方是这个Linux 2.6 内核开发人员之间的讨论主题关于“swappiness” VM 调整参数。
当您安装没有交换分区的 Linux 时,安装程序将警告您没有安装交换分区。
这只是安装程序中的硬编码行为,因为使用 swap 几乎总是一个好主意。许多 Linux 发行版可能需要 swap 来实现休眠,但如果你想的话,你可以改变它。
不,我不需要它 [交换] 因为我的 RAM 足够大,对吗?
错误的。或者对于少量的“需要”,严格来说,在这种情况下您不需要交换,但有了它,您的 PC 会更快。没有交换,您的所有程序都驻留在 RAM 中,包括那些不活跃且不会很快执行的程序。有了交换,不活跃的程序可以被换出,物理 RAM 可用于更高效的操作 - 主要是磁盘缓冲,以掩盖磁盘 I/O(包括 SSD)实际上有多慢。
如果你想控制内核在释放磁盘缓冲区和交换应用程序代码之间的平衡,那么你需要“swappiness”调整参数,我在上面链接了一个讨论。
答案3
当我们没有今天这样大量的 RAM 时,各种交换大小规则(“你应该拥有与 RAM 一样多的交换空间”、“你应该拥有两倍于 RAM 的交换空间”)更有意义。
我认为在典型使用过程中,完全没有必要使用过多的交换空间。如果您的典型使用模式与典型的桌面使用模式相同 - 浏览网页、听音乐、看电影等,那么 2 GB 的 RAM 应该足够了。另一方面,如果您偶尔会做一些非常耗费内存的事情,例如渲染非常复杂的 3D 场景,那么使用一些交换空间是个好主意。幸运的是,Linux 内核支持基于文件的交换,因此,如果出于任何原因需要交换,您可以按需配置大量交换,而无需重新分区。不过,我还没有尝试使用基于文件的交换从休眠状态恢复。
但是很难想象在 2 GB 的 RAM 和 2 GB 的交换空间接近其极限的情况下运行会是一个好主意 —— 在这种情况下,大部分时间将花在等待操作系统将页面换入和换出磁盘上,而不会完成任何实际工作。
而在服务器端,您不希望服务器永远不进行交换。如果服务器将不常用的进程转移到交换中,这没问题,但如果需要交换才能使活动进程存活,那么您就麻烦大了。
答案4
对于服务器来说,这一点并不像对于台式机那么重要,因为您永远不会想让服务器处于休眠状态。
但是:从 500GB 驱动器中分配 2GB 比购买更多 RAM 更便宜(每 GB 六美分)。“足够大”和“太多”之间的区别在于架构不再支持它。
请注意,从 2.6 内核开始,您还可以使用交换文件,因此您可以完全避免交换,直到您有一些使用分析来证明它的合理性。