我们在桌面电脑上还需要交换分区吗?

我已经阅读了这个问题,但是它是在服务器的背景下提出的,而不是桌面或笔记本电脑。
如果笔记本电脑上安装了足够的内存,比如8 GB,我们还需要交换空间吗?
6个回答

有一个常见的误解,认为拥有交换空间会对系统性能产生负面影响。这是不正确的。只要你有足够的内存,无论交换区的大小如何,都不会对性能造成伤害。影响性能的是内存不足,并且有效地使用交换空间。
  1. 如果你没有交换空间,并且恰好内存不足,内核将选择一个或多个它认为是合适的进程(尽管你可以给它一些提示),并将它们终止。

  2. 如果你有交换空间,并且内存不足,内核将选择使用较少的内存页面,并将它们放入交换区以释放内存。这会减慢系统速度,但你的应用程序不会受到影响。

我总是更喜欢第二种情况,因为我不愿意因为内核认为我的应用程序值得终止而丢失部分或全部工作。此外,考虑到当前平均磁盘大小在TB范围内,为交换预留几个百分点通常不是问题。


你的第一点真的是真实的吗?内核会杀掉正在运行的进程以释放内存吗?为什么内核不使用磁盘空间而选择终止活动进程呢? - Donato
7@Donato 是的,我的第一个观点是正确的。如果没有配置交换空间(即磁盘),内核就没有选择使用磁盘空间来释放RAM的机会。 - jlliagre
当我用完交换空间时会发生什么?回退到情况1吗? - Zac
1@Zac 是的,除非你真的禁用了内存超额分配,否则第一个无法分配内存的进程将受到影响。请注意,如果你配置了(大量的)交换空间,并且恰好使用了大部分空间,那么你可能会首先遇到严重的性能问题。 - jlliagre
1@jlliagre 但在这种情况下,我们只是在拖延问题吗? - Zac
@Zac 是什么案件和问题? - jlliagre
@jlliagre 情况:当我完成交换空间时;问题:内核将选择一个或多个进程并终止它们。 - Zac
3@Zac 如果你用尽了交换空间,实际上就和一开始没有交换空间的情况一样。一个或多个进程将会终止。它们可能会被oom killer选择,也可能只是在错误的位置和错误的时间。通常,一个经过适当监控的生产系统应该在交换空间耗尽之前触发警报,然后由管理员采取相应措施。 - jlliagre
那么,似乎更重要的是监控内存是否超过阈值,而不是依赖交换空间(这只是对进程可能随机被终止问题的权宜之计)。对我来说,这听起来是一个不使用交换空间的好理由(除非你真的没有足够的内存来运行程序)。 - éclairevoyant
@éclairevoyant 没有交换空间通常意味着浪费内存。在桌面上,将不活动程序分配的内存保留在RAM中且永远不会再次访问往往是毫无意义的。与其将RAM用于存储休眠数据,不如将其更好地用作文件系统缓存。 - jlliagre
选项2实际上使我失去了整个工作和服务器。禁用交换空间后,再也没有什么意外发生。交换空间的完美使用场景非常罕见,我们需要一个更好的调度程序,能够意识到内存滥用不是暂时的。很难只有少量且快速地使用多余内存。通常,如果所有的RAM都被占用了,没有理由相信它会在转角处停下来。更有可能是无限的,无论是规模还是持续时间。 - dawid

如果您的RAM为3GB或更高,Ubuntu将自动不使用交换空间,因为它对于操作系统来说已经足够了。
现在,您真的需要一个交换分区吗?
在我看来,答案是肯定的。因为您不知道将来会安装或做什么可能需要交换空间。此外,如果您计划使用休眠功能,可能需要一些交换空间。实际上,您并不一定非要有交换分区,但建议在正常操作中使用了那么多内存时拥有它。
有关是否需要交换空间的更多信息,请参阅Ubuntu Swap FaqSwap Requirements

你有一个链接可以证实你的第一句话吗? - jlliagre
@jlliagre 请查看http://mygeekopinions.blogspot.com/2011/03/do-you-really-need-swap-partition-if-so.html,该链接将引导您到http://askubuntu.com/questions/23676/change-swap-memory-size-after-adding-ram。 - Mitch
3博客的陈述误引了askubuntu的回复。没有证据表明user4124是Ubuntu的开发者。“通常不会使用”与“将自动禁用”是完全不同的。实际上,Ubuntu从不禁用交换空间,并且在需要时会使用它,即使你有8GB或更多的内存。 - jlliagre
@jlliagre 这意味着交换空间已经存在,但尚未被使用。当我安装Xubuntu 14.04时,它创建了一个16GB的交换空间,但迄今为止还没有被使用。请参见图片 - Mitch
1很高兴你纠正了你的回答。“不使用”绝对不等同于“禁用”。Ubuntu不会禁用交换空间,如果需要的话,它会使用它,而不管其大小。 - jlliagre

过去的6年左右,我一直使用至少8GB RAM的台式系统。我不记得在正常使用情况下系统曾经交换过内存 - 而且我经常用htop监视资源使用情况。即使在同时运行4个虚拟机(服务器)进行开发的情况下,也没有发生过交换。
话虽如此,如果您运行的应用程序对内存要求较高(例如视频编辑、图像编辑、大型数据库表操作等),可能会出现系统内存不足的情况。在这种情况下,拥有交换空间可能是可取的。将其视为最后的安全保障措施。考虑到今天系统的多TB容量,一个交换分区中的几个GB值得吗?宁愿安全一些,也不要遗憾 :-)

拥有交换空间总是一件好事。
这里我引用了Michael Jang的RHCSA/RHCE认证学习指南。
Linux交换空间
这样的空间用于扩展系统上有效RAM的数量,作为当前运行程序的虚拟内存。但你不能只购买额外的RAM并消除交换空间。即使你有几GB的RAM,Linux也会将不经常使用的程序和数据移动到交换空间中。
对于最多2GB的系统,默认的交换空间大小是安装的RAM的两倍。超过2GB后,它是RAM的大小+2GB。但这些并不是“硬性规定”。具有几GB RAM的工作站往往很少使用交换空间,但在长时间不重启或某些服务需求较高的系统上可能更频繁地使用。
根据我的经验,大多数服务器通常不需要那么多的交换空间,尽管增加一些也无妨。对于台式机来说,上述说明更有意义,以支持休眠等功能。

2Linux会将很少使用的程序和数据移动到交换空间,即使你有几GB的内存。我认为这里我们谈论的是加载在内存中的代码和数据。如果你有8GB的内存并且只运行常规应用程序,那么为什么会将任何代码或数据页面分页出去到交换空间呢? - Tarik
1@Tarik,首先:为了在块缓存中腾出更多空间,以便正在运行的程序能够获得更好的磁盘性能。 - greggo
总是是一个很强烈的词。 - dawid

这取决于您在系统上运行的内容。
如果您正在创建内容,最好仍然分配一些交换空间,这样如果您的内存用尽,您的进程只会变慢而不会被终止,从而避免潜在的工作丢失。
如果您的机器只是运行程序,那么您不需要也不希望有交换空间。我设计和构建了许多类似信息亭的显示系统,完全适合这种使用场景。与其进程变慢,我宁愿它突然死掉,因为这样我可以检测到这种情况并进行修复。

如果你需要交换或更多的交换空间,你可以在文件系统上创建交换文件。当然,它们不支持休眠,但对于带有SSD驱动器和大量RAM的笔记本电脑来说,这是一个合理的方法。