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


12

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

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

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

在Windows中,您实际上可以完全禁用交换。OSX是否有类似的东西?


为了澄清:1. VM系统是否存在瓶颈?就像您看到记忆星一样,如果发生页面调出,则数量很多。2.您从哪里获得Free和VM大小信息?例如,活动监视器中声明的VM大小与交换文件的大小不同。
Chealion

我没有证据表明VM系统(VM或交换)是问题所在,但是我确实知道我的台式机上有6GB的RAM,其中通常有2-3GB的可用内存。当我切换程序时,您会认为它会很快,因为它们都在RAM中,但是相反,它需要2到15秒的时间才能切换回Illustrator之类的东西。我在想服务器上也会发生类似的事情-像是MySQL或临时表的缓存。我正在使用top确定VM,RAM和交换的使用情况。有任何想法吗?
达里尔·海因

3
要确定实际的虚拟机使用率,最简单的方法是运行du -sh /var/vm-也就是说,如果存在sleepimage(通常在笔记本电脑上最常见),则可能虚高。有几种可用的工具可以帮助您确定是否是造成内存不足的原因:vm_stat-特别是您对pageouts值感兴趣-如果它增加很多,则说明您正在大量交换。有关苹果公司如何管理他们的记忆更多的信息:developer.apple.com/documentation/Performance/Conceptual/...
Chealion

Answers:


17

最基本的答案?否。操作系统为用户处理内存管理-为进程提供所需数量的内存,并且无法修改系统的性能。试图弄清楚内存利用率是否是Linux服务器为什么胜过Mac服务器的方程式,这并没有多大帮助。

由于虚拟内存系统缺乏“可破解性”,因此最好的选择是评估虚拟内存的性能,以查看它是否确实是造成性能问题的原因-最基本的方法是使用vm_stat或遵循它通过vm_stat [number of seconds]查看发生了多少次页面输出来进行实时显示。将未使用的页面从RAM移至硬盘驱动器的成本要比将页面从硬盘驱动器取回RAM的成本低得多。用OS X术语表示的页面是指4kb的数据。

此外,32位进程(例如Illustrator)不能访问超过4GB的空间,因此从理论上讲,如果安装了6GB的空间,则有2GB的空间可用,并且进程内存不足。

在台式机和服务器上,我都将运行vm_stat 2并检查最后一列-尤其是当您切换到Illustrator时遇到数秒的延迟时。

要查明交换的实际大小,您可以在“活动监视器”中检查交换大小或运行du -shc /var/vm/swap* | tail -n 1

使用du -sh /var/vm有一个警告:在具有休眠模式(过去4年或更晚的版本)的笔记本电脑上,sleepimage安装的内存大小可能大致相同。


Mac OS X内存行话:

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

共享:两个或多个进程之间共享的内存。这两个进程都将显示此内存量,因此在实际使用多少内存方面可能会产生误导。

实际:这是task_info()报告的应用程序的“实际”内存使用情况-当前进程具有的物理页数的粗略计数。(大小)

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

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

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

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

免费:内存实际可用的,没有任何的数据量。


我所知道的(并且能够在后续研究中找到的)最好的文档是Apple 在其开发人员网站上自己的《Managing Memory》文章。

其他有价值的资源: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(如果需要从单用户模式)

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.