我认为我理解MacOSX如何管理内存,但最近我对其性能感到困惑。情况如下:
任何人都可以告诉我为什么MacOSX不会为需要它的进程释放非活动内存,而是采用分页?另外,有没有适当的方法来影响系统的内存管理?
我唯一想到的是32位内核可能是限制因素,尽管我不确定原因。我知道您可以使用64位内核启动MacOSX,但之后我将无法加载许多32位应用程序,所以这对我来说不是一个选项。
答案 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成为必需品的地方,大多数情况下都不能没有。