无法理解MacOSX中的非活动内存

时间:2011-04-01 09:05:47

标签: macos memory-management

我认为我理解MacOSX如何管理内存,但最近我对其性能感到困惑。情况如下:

  1. 我有一个全新的Core i7系统,8GB的物理内存运行MacOSX 10.6.7。
  2. 有一些应用经常运行一些内存 - Safari,邮件,Xcode,终端等。
  3. 我需要并行运行三个64位进程,每个进程使用大约2000M的实内存。
  4. 虽然有线内存保持在1000M以下(即我有超过7000M可用于进程),但我发现大量的分页活动导致我推出的三个内存密集型进程的性能非常糟糕。
  5. 显然,我的可用内存不足,因为报告的非活动内存大约保持在2500M,而活动内存不会超过5000M。
  6. 任何人都可以告诉我为什么MacOSX不会为需要它的进程释放非活动内存,而是采用分页?另外,有没有适当的方法来影响系统的内存管理?

    我唯一想到的是32位内核可能是限制因素,尽管我不确定原因。我知道您可以使用64位内核启动MacOSX,但之后我将无法加载许多32位应用程序,所以这对我来说不是一个选项。

4 个答案:

答案 0 :(得分:8)

嗯,显然所需的解决方法是在MacOSX上使用purge命令。这将清除将大多数非活动内存标记为空闲的缓存。为了提高GUI的响应能力,操作系统似乎保留了尽可能多的非活动内存,这不幸影响了一些内存密集型工具的性能。

有一个帖子包含sister site的一些额外信息。

我想知道MacOSX Server是否可以调整为非GUI进程释放更多非活动内存...

答案 1 :(得分:1)

os x中的内存管理存在明显问题......

请看一下我的帖子:MAC OS X Lion performance problem - broken memory management 另外,我录制了一个屏幕视频,当所有可用内存消失时系统开始挂起,非活动内存为4-5 GB! MAC OS X Lion performance problem - screen video

我做了什么...... 我在图片/文件夹中的大量图片文件上运行tar + bzip命令,这是基本的unix东西。在开始之前,我运行“purge”命令,删除非活动/缓存的程序数据。

您可以在视频中看到可用内存开始快速下降,而非活动内存不断上升。如果你看一下“bsdtar”命令,它只需要一段RAM,所以问题不在这个过程中。你不能说它是一个程序内存泄漏,因为那时问题不会在非活动的ram中,而是在active / wired中。

当可用内存降至100mb以下时,我启动了一些应用程序,如Safari,iPhoto和MS Word,你可以在视频中看到启动应用程序需要几分钟(!),正常时(在那里)是免费的RAM),加载需要3-5秒。

答案 2 :(得分:0)

我遇到了一个非常类似的问题:非活动内存从未被释放,因此硬盘不断寻呼。升级到MacOsX Mountain Lion终于修复了它。

答案 3 :(得分:0)

在Mac OS X中,非活动内存构成当前未使用CPU周期的所有进程,即CPU使用率为0%。另一方面,活动内存由使用CPU执行的所有进程组成。启动新进程/程序时,它将成为活动内存的一部分以及当前正在运行的所有其他进程(意味着具有CPU使用率)。如果可用内存足以调整新进程,则一切正常,无需任何分页或交换。如果不是这种情况,则OS X开始向磁盘分页不活动进程。现在释放的内存块曾被标记为非活动状态,现在可以作为空闲内存使用。由于没有可用的可用内存(除了新创建的空闲块),这个新创建的空闲内存可能会发生两件事情块。一些先前处于活动状态但不再处于活动状态的进程(它们现在是非活动进程,因为它们放弃了CPU)占用了这个空闲块,因此它再次成为非活动内存的一部分,或者这个空闲块被分配给某些进程活动进程,所以它现在是活动内存的一部分。这个故事的寓意并不复杂。即使没有可用的可用内存,运行的任何活动程序都将运行良好。如果你必须启动一个新程序,那么初始延迟将会因为增加的加载时间而存在,因为OS X必须通过将最近最少使用的页面(非活动进程)移出到慢速磁盘来为它在内存中腾出空间。当你想要将OS X分页到磁盘的内容重新加载到内存中时,真正的痛苦就来了。这就是快速I / O成为必需品的地方,大多数情况下都不能没有。