有没有办法让OSX使用更多的RAM和更less的交换?

我遇到的问题是在服务器(以及其他OSX机箱),我们有4GB的RAM,但我们发现OSX只使用40-60%的可用RAM,同时也有6-7GB的交换。 服务器运行Apache和MySQL,而其他机器是桌面。

我一直在比较它的使用情况和类似的Linux机器(硬件和软件),发现Linux通常使用80-90%的RAM,并具有更小的交换文件(2-3GB)。 Linux服务器通常也运行得更快。

有没有办法强制OSX在使用磁盘交换文件之前使用更多或大部分内存?

在Windows中,您可以完全禁用交换。 有没有类似的OSX?

最基本的答案? 没有。操作系统处理用户的内存pipe理 – 根据需要为进程提供尽可能多的内存,并且无法修改系统的性能。 如果想知道内存利用率是否是Linux服务器为何超越Mac服务器的等式的一部分,那么这并没有什么帮助。

由于在虚拟内存系统中缺乏“hackability”,所以最好的select是评估虚拟内存的性能,看看它是否真的是出现性能问题的原因 – 最基本的是使用vm_stat或使用follow它通过使用vm_stat [number of seconds]来查看有多less页面出现。 将未使用的页面从RAM移动到硬盘驱动器的成本要比将硬盘驱动器的页面恢复到RAM更低。 OS X中的页面是指4kb的数据。

此外,32位进程(例如Illustrator)无法访问超过4GB的内存,因此理论上可以有2GB空闲空间,并且如果安装了6GB,则会导致进程内存不足。

在桌面和服务器上,我将运行vm_stat 2并检查最后一列 – 特别是当您切换到Illustrator时遇到多秒延迟。

要找出交换实际上有多大,你可以在Activity Monitor中检查交换大小,或者运行du -shc /var/vm/swap* | tail -n 1 du -shc /var/vm/swap* | tail -n 1

使用du -sh /var/vm有一个要注意的地方:在具有hibernate模式的笔记本电脑(过去4年或更新版本的任何设备)上,可能会有一个大概与您安装的内存大小相关的图像。


Mac OS X内存术语:

有线 :这是指内核代码等。 内存不应该被移出内存。 也知道作为常驻记忆。

共享 :在两个或多个进程之间共享的内存。 这两个进程都会显示这么多的内存,所以在实际使用内存的时候可能会有些误导。

真实 :这是由task_info()报告的应用程序的“真实”内存使用情况 – 粗略统计当前进程的物理页数。 (RSIZE)

私有 :这是一个进程在驻留内存中使用的单独使用的内存。 (RPRVT)

虚拟 :映射到任何东西的进程中的地址空间总量 – 无论是variables或任何东西的任意大的空间 – 它都不等同于实际的虚拟机使用。 (VSIZE)

活动 :当前标记为活动的内存,使用RAM。

Inactive :“不活动的内存不再被使用,并被caching到磁盘,它将一直保留在RAM中,直到另一个应用程序需要这个空间为止,如果你(或者你的计算机的一个客户端)返回这个信息,到后来“。 – Mac OS X帮助

Free :实际可用的RAM数量,不包含任何数据。


我知道的最好的文档(在后续研究中能find)是苹果公司在其开发者网站上的pipe理内存文章。

其他有价值的资源:Darwin-dev邮件列表:[ 1 ],[ 2 ]和MacOSXHints上的一篇旧文章。 另外Mike Ash在他的博客上发表了一个很好的外行介绍


这可能是(我还没有尝试过)通过运行sudo launchctl unload /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist来禁用虚拟内存系统,然后重新启动,以便dynamic_pager(实际上执行的程序虚拟内存分配)不启动。 但是,由于操作系统假定它具有虚拟内存,因此您可能会发现自己遇到问题的速度非常快。 加载它备份运行sudo launchctl load /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist (如果需要从单用户模式)