为什么要在Mac OS X中禁用交换文件?


51

我遇到了有关在MacBook Pro中安装SSD驱动器的问题。
评论中的某人还建议禁用交换文件,但未说明原因:

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

我不知道为什么要在Mac OS X中禁用交换文件。
这会提高性能吗?稳定性?
有什么缺点吗?

最后,在使用SSD 时禁用交换文件是否有意义?


11
知识渊博的人常常禁用它,因为他们在某个博客上听说性能急剧上升。SSD本质上是快速的,因此它们也提供了不错的测试平台。不要这样 它将降低稳定性,并随着时间的流逝导致灾难性影响。到目前为止,我还没有看到任何实际数据(有效且可靠)显示出性能提高。它是操作系统的一个重要组成部分,无论你有2 GB或RAM或120

2
有什么灾难性的影响?只是好奇...似乎使我的机器(4GB MacBook Pro)快了一吨。例如,当我打开新的终端窗口时,不再有任何阻塞……这是几秒钟前的瞬间。而且,我打开的应用程序数量是我通常使用的两倍,并且没有发生任何不好的事情。
orange80 2011年

4
orange80:终端窗口运行缓慢的常见原因是登录过程查找以前的登录,可以通过hushlogin进行修复:apple.stackexchange.com/a/54167/22570-您是否在更改交换设置后重新启动,也许?没有理由通过删除交换来提高终端窗口速度。
肯(Ken)

我了解小容量固态硬盘可能需要释放空间。但是从性能方面来看,SSD比HD快得多,因此我看不到在基于SSD的操作系统中禁用交换功能如何才能真正提高性能。有什么经验吗?谢谢。

1
在“超级用户”中,有一个可接受的答案:禁用Mac的dynamic_pager?(2012-04-27)
Graham Perrin

Answers:


39

想知道为什么要在Mac OS X中禁用交换文件。这会提高性能吗?稳定性?有什么缺点吗?

我想人们会为SSD驱动器这样做,因为这些驱动器的寿命与标准磁纺磁盘驱动器的寿命不同。写入周期的数量有限,因此大概将它们与交换文件一起使用会更快地用完这些周期。

最后,在不使用SSD时禁用交换文件是否有意义?

如果您有大量的RAM,这可能会提高性能,但这通常不是一个好主意。如果确实遇到内存上限的问题,那么事情将会变得不稳定。

此外,有线内存在变为无效时不会释放,仅在触发页面输出事件时才释放,如果禁用了虚拟内存,则不会发生。因此,即使不再使用所有内存,也不会花很长时间。


4
mac虚拟内存系统非常懒惰,因为它仅在需要交换实际内存时才创建物理交换文件。无论您通过不延迟事情来容纳对交换的写操作而看到的任何速度提高,几乎可以肯定会被首先具有交换功能所带来的先前速度提升所抵消。进行交换可使Mac更快。剩下的答案就眼前-做得很好!
bmike

2
@geotavros Mac OS X中的虚拟内存系统无法与Windows一起使用。相信我,有了4GB的内存,您的Mac将在启用虚拟内存的情况下运行得更快。禁用虚拟机只会导致您头疼和系统不稳定。
ghoppe 2012年

3
FYI是一种具有写入均衡功能和不错的容量(128 GB)的现代固态硬盘,可以连续写入,其写入周期限制以世纪为单位。在2000年,使用小型原始SSD时,这是一个合理的担心,但现在已经不复存在了。
肯(Ken)

3
对于具有8 GB内存的MacBookPro5,2,性能提升非常明显。对于VirtualBoxVM中的Snow Leopard或Lion,改进是惊人的。在这三种情况下,操作系统似乎都在以某种方式使用内存,以最大程度地降低达到“极限”(所有事物均有效停止)的风险,但这种风险仍然存在,因此在活动监视器中观察使用情况是理智的。
格雷厄姆·佩林

2
有关信息,VM(或虚拟内存)不应与交换文件混淆。Windows,OS X,* BSD,Linux和许多Unix都使用虚拟内存。通常,此OS的体系结构为每个进程提供一个VM,该进程在该区域内分配了内存,并且OS会小心地将此分配的内存放在物理RAM上,或按OS的要求进行交换。对于各种标准(速度,响应度等),是否进行交换可以以一种方式或其他方式进行更改,这将取决于我们每个人的工作量。就像英国人说的那样:您的年龄可能会有所不同!并在这种情况下很大。
惠更斯州

27

他们禁用交换文件的原因可能与每个块具有最大写入次数的SSD有关。交换文件可能被频繁写入,可能导致磁盘碎片(以及文件系统碎片),并最终可能导致磁盘过早失效。

也就是说,这绝对是过早优化的情况。它几乎总是太可怕了太可怕了主意,禁用交换文件。当运行的程序消耗的内存比实际安装的内存更多时,交换文件就存在。如果禁用它,则可能无法同时运行多个程序(并且该限制远远低于您的预期),或者在以下情况下您可能会遇到问题(例如冻结和必须重新引导计算机)您的内存不足。

磁盘空间不足时,我经历过后者(启用了交换文件)。我有120个演出驱动器,大约有3个演出。在玩《文明4》(大型,全屏游戏)时,系统用完了硬盘空间(免费提供约50兆),并显示了“立即杀死应用程序”窗口。这隐藏在全屏游戏的背后,因此系统被锁定。如果无法从另一台Mac插入SSH以远程杀死多个应用程序,则必须按住电源按钮。


6
我想回应一下这是一个坏主意。即使您有16 GB RAM,也会使用交换。不会那么多,但是交换中已经写入了一点点。总是。这是一种保障。而且,尽管没有该操作系统也可以运行,但是您无法确定第三方应用程序的行为。高清得到写入。生活就是事实。不,不会出现“现实世界”的性能提升。那是安慰剂。

4
@cksum在某些特定的服务器情况下,系统管理员将禁用交换文件,因为它确实可以使特定的配置更快,但是在没有进行测试以确保它(a)不会耗尽内存和(b)的情况下,他们不会这样做。 )实际上更快。但这是由专业人员运行的服务器:在消费计算机上从来没有必要。
CajunLuke 2011年

@cksum我可以同意你的第一句话,你对第二,第三和第四句话是正确的,但是剩下的就是垃圾。操作系统不会交换“安全防护”,而操作系统正在交换以为需要它的活动进程提供更多可用内存,或者通过缓冲数据来加速I / O,因此可以在RAM中释放较长的非活动内存。在开发应用程序时,您需要向操作系统请求内存,该内存是虚拟内存使用的一部分,作为开发人员或应用程序,您不知道操作系统是否将该内存或内存的一部分放入物理RAM或交换。(待续)
惠更斯地区

因此,如果第三方应用程序请求的内存超过可用内存,则操作系统将给它一个错误。这与是否进行交换无关。进行交换只会使限制更高,仅此而已。至于性能,如果您有2个用户登录,那么如果活动用户使用带有巨大文件的视频编辑器,则操作系统可能会开始将非活动用户的内存页放入交换区,以加快活动用户完成的任务。在这种情况下,您可以在速度方面获得更好的性能。但是,切换到其他用户会比较慢,操作系统必须回读交换。这不是安慰剂!
惠更斯州

1
我曾经(在Linux中)在设置时忘记设置交换分区。当我上吊时,我以为这是一个内核错误-原来是玩mincecraft时缺少交换内存。使用交换。
Wyatt8740 2015年

12

您有两个很好的答案,可以解释为什么在几乎所有系统都可以写入存储设备的情况下,这都是一个坏主意。

可以禁用交换的原因是,系统可以在只读介质(例如CD,DVD,使用NetBoot锁定的网络映像)上运行,或者在只读USB密钥卡上运行,例如新的Lion安装程序或恢复密钥卡(随某些缺少光驱的Mac一起提供)驱动器。

拥有虚拟内存意味着当许多程序使用相同的公共库代码时,系统可以运行得更快,并使用更少的RAM。每个程序都认为它具有所需代码的私有副本,但是当存在虚拟内存时,系统可以通过一种不错的方式将相同的物理RAM映射到不同的程序。

禁用交换可防止mac将驱动器的一小部分用作已计算内存的高速缓存,但是该程序不够智能,无法将这些结果本身写入适当的高速缓存。

如果您有备份并有时间进行实验,何不将其关闭并查看您的体验如何变化。

即使我确定必须每年支付一次新驱动器,我也将继续进行交换。交换给我的速度是巨大的。并非总是如此,有时在系统崩溃或分页时,情况可能恰恰相反。许多人选择不交换就运行,这样他们会得到内存分配错误,而不是让他们的mac开始分页,因为这会在机器运行不平稳时降低计算机的速度。

您使用SSD的情况可能会有所不同,因此请尝试将其告知我们。


2
我发现相反的情况,当dynamic_pager禁用时,极大的加速。当前在apple.stackexchange.com/a/60661/8546上的屏幕截图显示了禁用守护程序(未使用交换文件)时测量的虚拟内存大小和页面插入量。
格雷厄姆·佩林

究竟要测量什么以确定加速?(或者您是否在用户界面中没有滞后或延迟或其他不容易量化或衡量的东西?)
bmike

不用衡量:使用Lion,大多数事情似乎都明显更快了-足以让我使用“ 巨大”这个词。最近:例如,在VirtualBoxVM中10.8登录和恢复活动监视器需要16秒(不使用时)dynamic_pager和12秒(不使用)。为了进行更广泛,更合理的比较,我们可以使用Phoronix Test SuiteGeekbench
格雷厄姆·佩林

9

在这里,我将成为反对者:我在2008年末推出的一体式Macbook Pro上禁用了交换功能,从而显着提高了性能:等待时间更少,应用程序之间的切换速度更快。

请注意,我会注意我的可用内存,并且已安装6GB。我几次达到内存限制,系统崩溃了:-D

在我的新MacBook Air上,我没有梦想禁用交换功能,启用它已经非常快了,而且它最初只有4GB。

人们在SSD上禁用交换的另一个很好的理由是,因为他们获得的SSD很小,并且需要所有可用的空间。无论如何,不​​要这样做。


真有经验的地方。禁用交换功能后,计算机对RAM的承诺是多少?当您打开的应用程序超出内存容量时,会发生什么情况?您有多少RAM,并且哪些应用程序可以在该空间舒适地运行而不会出现错误?
bmike

1
@bmike,不确定,系统崩溃:-D,6GB和所有我使用的:)。Aperture或XCode是真正的内存猪,它们有时可能会掠过系统,但Skype,Mail,Adium,Safari,Chrome,iTunes和OmniFocus都非常合适...
w00t

6

我的经验与w00t相似。我已禁用SL和Lion上的交换文件,因为性能提升对我有用。一周左右的时间后,有线使用的确会失控,但是通过简单的重新启动即可解决此问题。我没有SSD,但磁盘速度慢于5400rpm。SSD的使用寿命实际上并不像人们试图使它们寿命长那么糟糕。如果您只是因为害怕担心SSD耗尽而这样做,请访问:http : //www.anandtech.com/show/4159/ocz-vertex-3-pro-preview-the-first-sf2500- ssd / 2http://communities.intel.com/thread/21717?tstart=0英特尔对80GB硬盘的驱动器每天进行每天超过20GB的评估,长达5年。更大尺寸的驱动器将持续更长的时间。普通用户每天甚至不会使用10GB。

我确保使用iStat Menus监视4GB内存使用情况,并使用带有“ purge” bash命令(需要安装Xcode)的Automator脚本来清除不活动的内存并经常打开更多的可用内存。几次遇到内存泄漏的应用程序用完了所有RAM的情况后,我确实必须进行硬重置。这种情况很少见,而且通常情况下速度加快,因此值得为我禁用交换文件。我意识到,由于其他人的陈述,我无法一次打开那么多应用程序,但是我可以使用它。


Memory Scope具有自动清除的选项。(如果启用了dynamic_pager,则不允许清除。)
Graham Perrin

5

对于那些由于小型固态硬盘而希望禁用交换功能的用户,只花了我2美分:sleepimage使用了更多的磁盘空间。

而且,对于那些担心SSD寿命有限的人(尤其是那些无法更换MBA和硬连线SSD芯片的人),如果您的计算机每天睡眠很多次,则可能需要重写sleepimage。我的笔记本电脑每天轻松睡眠六次。每天将48GB数据写入我的SSD。

每种情况下的解决方案是禁用休眠,然后删除与您已安装的RAM(在我的情况下为8GB)一样大的sleepimage文件。

不利的一面是:如果笔记本电脑在睡眠状态下电池没电了,您的当前状态将会丢失。这将等效于强制硬重启。对笔记本电脑没有物理伤害,只是生产力的损失。如果您禁用了休眠模式,则电池电量不足并且无法充电,只需准备好代码即可启用休眠模式!

要禁用休眠,在终端中,命令如下:

 sudo pmset -a hibernatemode 0

要启用休眠模式,命令如下:

 sudo pmset -a hibernatemode 3

要删除最后一个睡眠映像以释放SSD / HDD空间(仅当您关闭休眠状态才有意义,否则,下一次计算机休眠时,一个新的睡眠映像将占用该空间):

 sudo rm -rf /var/vm/sleepimage

资料来源:man pmset


3

禁用交换功能确实可以提高性能。例如,我经常使用Aperture,并且当交换增长时性能会变差,并且当它超过1Gb时,我必须重新启动操作系统以清理它并恢复性能。注意:计算机具有6GB的RAM,但并非全部占用,大约3GB可用,但是1G的交换会显着降低性能。


3

多年来,我一直在OS X和其他UNIX变体上禁用计算机上的交换。

当内存快要用完时,我会使用一种工具来提醒我,而不必担心系统崩溃。

我的iMac有12GB,禁用了交换功能后,我几乎总是有4GB的可用空间,即使有多个开发工具,应用程序,浏览器等也可以打开。


5
您正在使用什么存储工具?
德米特里(Dmitriy)2012年

1

这里的重复模式是这样的:

那些禁用了交换文件的用户提高了性能(具有足够的物理RAM)

那些没有禁用交换空间的人一定会认为它不会起作用,并且会发生一些可怕的事情,并且强烈建议您不要这样做。

这仅仅是由于两件事:

  1. 关于物理RAM的稀缺性和高成本的过时想法已不再有效
  2. MacOS中一种非常差的交换机制,当有足够的物理RAM时会导致使用交换文件。

1
如果仅在需要时使用交换空间,那将是很好的。但是,事实并非如此。我在MacOS上运行2gb和4gb虚拟机。如果我有1.6gb的可用RAM,则我应该能够运行1GB的虚拟机(或其他程序),但是不能,因为操作系统开始分页。结果,我只能使用大约85-90%的RAM。如果要访问所有RAM,则需要禁用分页。我在所有Windows机器上都执行此操作,并且希望在MacOS上执行相同操作。如果程序用完RAM,它将失败。那就是我想发生的事情。我不想要其他正在运行的应用程序

3
YMMV。我不再禁用交换功能,因为我没有发现它可以帮助现代内存加载的计算机提高性能。我过去曾经这样做,因为它确实可以帮助我们摆脱过去的糟糕状况。如今,不仅通过禁用交换看不到任何性能变化,而且确实看到应用程序的不稳定性大大增加。
Brian Knoblauch

1
该不希望的事情发生的是,人会忘记,他们不能启动其他程序和时间,机器会死机,由于内存不足的错误。这是否可怕,幽默,受教育程度取决于时间,备份频率和延迟容忍度。
bmike

1

只是个人经历。

Memory Amount    |
 4 GB            | Don't disable it, Mountain Lion itself boots with about 1 GB.
 8 GB            | Do if you don't run apps that requires more than 1 GB of memory, in short, virtualization software, Photoshop, and stuff.
16 GB or more    | Do it! Even Xcode or Final Cut won't use more than 4 GB of memory, at least as I've seen. Just don't run too many virtual machines though.

快速说明:如果您的Mac使用集成的图形,则其内存将通过kernel_task与您的主内存共享。因此,您将不得不从总可用量中减去该金额。

固态硬盘用户,拥有更多的空间是令人满意的,但重要的是要知道虚拟内存在固态硬盘上蓬勃发展,您可以从中获得很多性能提升。它会伤害SSD吗?是的,但是您将在发现之前长时间更换Mac。


1
我个人仅在具有8 GB内存的Retina MacBook Pro上禁用了虚拟内存。这是数学,系统使用大约2 GB的内存来计算集成图形。所以对我来说是6 GB。我做Xcode上班,消耗的内存不超过2 GB。所以我有很多余力。
谢恩·苏

1

执行摘要

交换区(称为交换分区,交换文件或页面文件)只是一种增加操作系统可寻址物理内存的机制。

如果您的可用物理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。到目前为止,我还没有看到这台机器交换!


0

我只是在2011 Macbook air上禁用了交换文件(4GB RAM,128GB SSD),因为我对交换文件感到厌倦,慢慢吞噬了我所有剩余的HD空间,然后不得不重新启动。这样,我的想法是我将只运行较少的程序。

我将看看这是否真的有效,或者无论如何我都必须重新启动以清除“有线”内存,但目前看来它运行良好。一次内存真正满了,计算机的速度就和我的SSD内存不足时一样慢-但是一旦我退出应用程序,它的恢复速度就快得多。(而且我实际上能够退出应用程序,而当SSD装满时我通常无法退出)。

我将了解它如何在稳定性方面发挥作用,但到目前为止,我是一个快乐的露营者。这也迫使我一次运行更少的应用程序(和Chrome标签),这对于任务集中很有用。


0

禁用交换文件的主要原因不是速度-它是磁盘空间。

如果某个用户通常在整个驱动器的5 GB内存中运行,则禁用交换功能将停止不断耗尽空间的烦恼;我通常会通过常规浏览获得4 GB以上的交换文件。

在旧机器上,速度的提高令人震惊。在配备SSD的现代机器上并没有那么令人印象深刻。(在iMac上的OSX 10.0下,使用虚拟内存使许多操作(包括在驱动器之间复制文件)的速度减半。


这听起来更像是固定喇叭,因为刹车不起作用。如果驱动器太满,请从中取出一些数据。
Tetsujin 2015年

@Tetsujin该驱动器上最大的单个文件是交换文件。
aramis

我的观点仍然成立。更少的数据,更大的驱动器或更多的RAM,而您不必这样做。
Tetsujin
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.