为什么我们需要将交换空间设置为物理内存的两倍?


11

当我们要设置Linux系统时,通常建议将交换空间设置为物理内存的两倍。我想知道为什么我们需要这个,这个建议是如何形成的?

Answers:


8

简短的回答是“你不会来”。

根据内核/系统类型的不同,可能需要这样设置交换空间的大小,例如,在FreeBSD的tuning(7)联机帮助页中,我们发现交换大小背后的以下理由至少为物理内存大小的2倍:

对于RAM少于2GB的系统,通常应将交换空间的大小设置为大约2倍的主内存,如果有更多的空间,则应将其大约为1倍主内存。但是,如果没有很多RAM,通常会需要更多交换空间。不建议您在系统上配置少于256M的交换,并且在调整交换分区大小时应牢记将来的内存扩展。当与主内存的交换至少达到2倍时,内核的VM分页算法已调整为最佳性能。配置太少的交换可能会导致VM页面扫描代码效率低下,并且在以后向计算机添加更多内存时又会造成问题。最后,在具有多个SCSI磁盘(或在不同控制器上运行的多个IDE磁盘)的大型系统上,我们强烈建议您在每个驱动器上配置交换。驱动器上的交换分区的大小应大致相同。内核可以处理任意大小,但内部数据结构可扩展到最大交换分区的4倍。保持交换分区的大小接近相同,将使内核在N个磁盘之间最佳地划分交换空间。不必担心过度使用它,交换空间是UNIX的节省之处,即使您通常不使用太多交换,它也可以为您提供更多时间从失控的程序中恢复,而无需强制重新启动。保持交换分区的大小接近相同,将使内核在N个磁盘之间最佳地划分交换空间。不必担心过度使用它,交换空间是UNIX的节省之处,即使您通常不使用太多交换,它也可以为您提供更多时间从失控的程序中恢复,而无需强制重新启动。保持交换分区的大小接近相同,将使内核在N个磁盘之间最佳地划分交换空间。不必担心过度使用它,交换空间是UNIX的节省之处,即使您通常不使用太多交换,它也可以为您提供更多时间从失控的程序中恢复,而无需强制重新启动。

当您决定分配多少交换空间,在哪里分配等等时,其他因素可能也很重要。例如,如果要安装具有128 GB物理内存的大型服务器,最好避免为未使用的交换预先分配256 GB磁盘空间。

另一方面,拥有一些交换空间通常可以获取内核转储(例如,在Open-,Net-和FreeBSD中)。因此,最好至少有足够的交换空间来在发生紧急情况时获取完整的内核转储。

没有适用于所有情况的绝对规则。您必须阅读有关特定系统的行为,了解其工作原理,考虑系统的预期用途,并确定适合需要的最佳交换空间大小。


5

您根本不需要。Windows的旧版本会将交换内存的每一页本质上视为交换文件上的mmap,因此交换至少需要您的总物理RAM大小才能使它有用-今天不再是这种情况,并且永远不会在Linux中的情况,但谣言仍然存在。

但是,在某些情况下,希望具有至少与RAM一样多的交换-休眠。由于Linux使用交换文件进行休眠(也称为挂起到磁盘),因此您需要足够的交换来将所有数据保存在RAM中,以及已经交换出的所有数据(减去高速缓存RAM)。当然,这仅适用于需要休眠的计算机(例如笔记本电脑)。

最后,尽管别人可能会说,过多的交换可能是一件坏事。想想-如果您有4G的RAM,并且还需要额外的8G交换,那么您认为您的系统仍然可以使用,与磁盘进行的所有交换操作又如何呢?通常最好在内存用完时立即终止占用内存的进程,而不是在整个系统开始花费所有时间将数据编组进出交换区时将整个系统的速度降低到无法使用的水平。


1

很久以前,有一个通用的unix变体(我认为它是BSD,但现在找不到参考),它将在交换空间中分配每个虚拟内存页。因此,如果交换与RAM一样多,则虚拟内存的大小仍将与RAM相同。然后,通常的建议是交换空间是RAM的两倍,这使虚拟内存是RAM的两倍。

现代的unices并不是那样,所以该规则的原因已经过时了(我认为它在1992年已经过时了,因此它与Linux无关)。但奇怪的是,该规则得以幸存。如果现在就遵循它,您将获得的虚拟内存是RAM量的三倍,而最初的目的是获得两倍的内存。

仅仅因为该规则背后的历史原因是错误的,并不意味着它是愚蠢的。磁盘空间变得越来越便宜,因此分配更多的交换空间很有意义。您应该进行多少交换很大程度上取决于您拥有多少RAM以及如何使用它。您可以在没有交换的情况下运行系统,但是如果您的RAM确实已满,那么您将没有机会选择要杀死哪些程序,并且系统可能会变慢(有时最好使用RAM进行缓存并交换一些程序内存出来)。分配过多的交换会花费少量的RAM(用于内核数据结构),当然还要花费磁盘空间(但如今,除了SSD之外,这通常非常便宜)。如果要休眠,必须有足够的交换空间以适合所有虚拟内存。


Windows也会这样做:如果内存管理器有足够的交换空间,它还会在内存中保留页面的副本(从我猜测是最近修改最少的页面开始),因此,如果需要交换它们,它可以做到这一点。通过将页面从内存中移开。
pqnet 2014年

0

一项古老的建议基于对典型系统内存容量,内存总线速度与磁盘速度以及进程在各种等待状态下花费的时间百分比的假设。我对此持怀疑态度,这些天您可能希望交换空间中的物理内存超过1/2,这足以防止在接近全部内存利用率的情况下随机杀死OOM。但完全取决于您的典型工作量,YMMV等。

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.