执行摘要
交换区(称为交换分区,交换文件或页面文件)只是一种增加操作系统可寻址物理内存的机制。
如果您的可用物理RAM不足,并且在当今的计算机上,我要说的是,您有4 GB或更少的RAM。然后,您可能应该进行交换。但这取决于您的工作量以及如何使用计算机。
如果您有超过4GB的RAM,则很有可能您的系统可能永远不会使用交换。因此,无论是否启用交换,此更改都不会太大。
尽管这取决于其他因素,但您的计算机运行的时间越长,即使表面上仍有很多剩余空间,OS也会将RAM中较小的未使用部分交换给交换。但是,系统通常将“空闲” RAM用于文件缓冲区和其他内容,并且某些工作量可能会使您的文件缓冲区使用所有可用的RAM。
背景资料
如果禁用交换并且内存被完全使用,会发生什么情况?好了,下一次应用程序请求更多内存(例如使用malloc或realloc)时,它将收到错误消息!如果编码正确,应用程序将检测到它,但是处理此类错误并优雅地终止程序可能仍然是一个挑战!但是,许多开发人员并未测试是否成功分配了内存,并且经常会在使用此未分配的内存后立即使应用程序崩溃。因此,该应用程序很可能会崩溃,并且实际上很多应用程序都将崩溃,因为您通常同时运行多个应用程序。希望内核本身可以不受干扰,但是以我的经验,情况并非总是如此。
如果进行交换,您将具有相同的行为,但是您有一个更高的限制,因此很可能不会达到该限制。
我有2台分别具有8 GB和16 GB RAM的机器。我个人对这些机器的使用决不能使我接近使用所有这些RAM(今天!也许几年后可能会有所不同)。我达到物理RAM限制的唯一原因是一个进程变得流氓并且正在消耗所有RAM。没有交换是一种缓解,内核将在达到RAM限制后立即终止恶意进程。如果进行了交换,您将获得痛苦的体验(也许没有在SSD上...),因为系统将交换,交换和交换,有时甚至变得完全无响应,直到希望您的内核杀死了罪魁祸首!
忠告
人们不会告诉您,如果删除交换,可能会发生可怕的错误,您不必担心。如果这样做,您的物理地址空间将减少,就像您将RAM的大小从4 GB减少到2 GB一样。你会做这样的事吗?然后,您不应该删除交换。但是,您可以决定限制它,这是明智的。
如果有人认为他的工作量可能使他使用的内存接近或超过可用的物理RAM,或者如果有人需要大量I / O(对磁盘的读/写),则应保留交换。
当应该保留交换时,用户应尝试设置进程可以使用的内存量限制。在Linux系统上,可以使用cgroups内存限制来避免某些进程失控,我不知道OS X上的等效方法,但这应该是这样。
但是,如果一个人有足够的可用内存来处理其工作负载,则他可以安全地禁用交换或保留它。即使在性能方面它也不会有太大变化,因为如果系统不使用交换功能,那么您就不会受到性能下降的打击(尤其是在旧的旋转硬盘上可见,而在SSD上则更少)。
在可用RAM足够多的情况下,使用与上述相同的技巧尝试为每个进程或一组进程设置内存限制也是有益的。
我自己的例子
我有一台具有1 GB RAM的旧PC,但我确实有一个很大的交换空间:4 GB,因此我可以在上面运行Firefox和其他应用程序。我倾向于使用尽可能少的应用程序(或Firefox中的选项卡)来获得正确的用户体验。
我有一台8 GB RAM的小型服务器。在那里,我确切地知道了我的工作负载,并且我不希望我的服务器速度变慢,因为进程变得无用并消耗了所有内存。我没有交换和cgroup内存限制强制执行障碍,因此应用程序或服务可能崩溃,但内核无法崩溃。顺便说一句,这是一台Linux机器。
然后,我有16 GB RAM的Mac。我不是它的唯一用户,切换用户时我们不会介意等待。那里确实有交换,这对我来说很难计划这台计算机的其他用户的工作量。即使我是唯一的一个,我也会使用swap。我经常运行多个VM并使用占用内存的应用程序,但不是同时运行所有VM,因此我不介意在未使用的应用程序中交换操作系统,以便获得更快的磁盘I / O或启动另一个VM。到目前为止,我还没有看到这台机器交换!