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

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

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

我一直在将其使用情况与类似的 Linux 机器(硬件和软件)进行比较,发现 Linux 通常使用 80-90% 的 RAM,并且交换文件要小得多(2-3GB)。Linux 服务器通常运行速度也快得多。

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

在 Windows 中,您实际上可以完全禁用交换。OSX 有类似的功能吗?

答案1

最基本的答案是什么?不。操作系统负责为用户处理内存管理 - 为进程提供其请求所需的内存,并且无法提供大量修改系统性能的功能。这对于弄清楚内存利用率是否是 Linux 服务器优于 Mac 服务器的原因之一没有多大帮助。

由于虚拟内存系统缺乏“可破解性”,因此您最好的选择是评估虚拟内存的性能,看看它是否真的是您遇到性能问题的原因 - 最基本的方法是使用vm_stat或使用实时跟踪它,vm_stat [number of seconds]看看发生了多少页面输出。将未使用的页面从 RAM 移动到硬盘驱动器的成本比将页面从硬盘驱动器检索回 RAM 的成本要低得多。OS X 术语中的页面指的是 4kb 数据。

此外,32 位进程(例如 Illustrator)不能访问超过 4GB 的内存,因此,理论上有可能有 2GB 的内存可用,而如果您安装了 6GB 的内存,则会出现进程内存耗尽的情况。

我会在您的桌面和服务器上运行vm_stat 2并检查最后一列 - 尤其是当您在切换到 Illustrator 时遇到多秒的延迟时。

要了解交换空间的实际大小,您可以检查活动监视器中的交换空间大小,或者运行du -shc /var/vm/swap* | tail -n 1

使用时du -sh /var/vm有一个警告:具有休眠模式的笔记本电脑(过去 4 年或更新的任何模式)的大小可能大致sleepimage等于您安装的内存大小。


Mac OS X 内存术语:

有线:这指的是内核代码等。不应移出 RAM 的内存。也称为常驻内存。

共享:两个或多个进程之间共享的内存。两个进程都会显示此内存量,因此实际使用的内存量可能会有点误导。

真实的:这是 task_info() 报告的应用程序的“实际”内存使用情况 - 当前进程所拥有的物理页面数量的粗略计数。(RSIZE)

私人的:这是进程独自使用的内存,用于常驻内存。(RPRVT)

虚拟的:进程中映射到任何内容的地址空间总量(无论是用于变量的任意大空间还是其他内容)并不等于实际的 VM 使用量。(VSIZE)

积极的:内存当前被标记为活动并且是已使用的 RAM。

不活跃:“非活动内存不再使用,并已缓存到磁盘。它将保留在 RAM 中,直到另一个应用程序需要该空间。如果您(或您的计算机客户端)稍后返回,将此信息保留在 RAM 中对您有利。” - Mac OS X 帮助

自由的:没有任何数据时实际可用的 RAM 数量。


我所知道的最好的文档(并且能够在后续研究中找到)是苹果自己的管理内存他们开发者网站上的文章。

其他有价值的来源:Darwin-dev 邮件列表:[1], [2] 和一篇关于MacOSX提示。此外,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(如果需要,请从单用户模式运行)

相关内容