我从几个月开始使用 OS X(Lion 和现在的 Mountain Lion)。我的 mini 上有 8 GB 的空间,现在几乎每天都接近了。在 8 GB 的 Windows 7 机器上,我从来没有遇到过这种问题。无论如何,我在网上读到,非活动内存是最近关闭的程序的应用程序缓存,可用于更快地重新打开。如果需要,此非活动内存可以释放给新应用程序。它没有被释放。相反,OS X 开始交换。所以我的问题是为什么 OS X 在有很多“非活动内存”时使用交换?这是一个显示我的意思的屏幕:

我真的希望在开始交换之前让 OS X 使用那些 2.69 GB。我真的这样做了。
m00*_*000 19
交换显然发生在不活动的 RAM 页面实际上处于活动状态时。
(更新:正如评论中澄清的那样,这不是你的情况。所以有同样问题的人可以跳到水平规则。)
即你有很多程序在运行,内核交换了一些页面。然后你退出了一些程序。内核将它们的 RAM 页标记为非活动状态。但在需要这些页面之前,它不会将页面交换回 RAM。这会导致页面处于非活动状态和换出页面。
为什么不抢先换入页面?因为那是在赌输赢:从长远来看,你会输。让我们考虑一个简化的例子:两个程序 A 和 B 不能同时放入 RAM 中。程序 A 仍在运行,所有换出的页面都属于 A。程序 B 已退出,所有非活动页面都属于 B。
如果内核抢先交换 A 的页面并立即在:
还要考虑到换出(写入磁盘)比换入(从磁盘读取)成本更高。这使得这种“赌注”更加没有吸引力。
简而言之:相信你的内核,不要试图超越它。
更新: 事实证明非活动内存不起作用,因为使用活动监视器阅读系统内存文章使许多人相信它有效。文章中对非活动内存给出的定义是正确的:
此信息在 RAM 中,但并未被积极使用,它是最近使用的。
但是以下示例完全具有误导性且过于简单化(坦率地说,就像我的示例一样):
例如,如果您一直在使用 Mail 然后退出它,Mail 使用的 RAM 将被标记为非活动内存。非活动内存可供其他应用程序使用,就像空闲内存一样。但是,如果在其他应用程序使用其非活动内存之前打开 Mail,Mail 将打开得更快,因为它的非活动内存会转换为活动内存,而不是从较慢的驱动器加载它。
我搜索了更多的在线资源,最终在 darwin 内核邮件列表中找到了这个线程,它的信息量很大。引用 Jim Magee(来自达尔文团队 - 我认为):
简而言之,内核 VM 系统在处理内存压力时会扫描使用中的页面,并尝试使它们在活动标记和非活动标记之间保持平衡。非活动页面在标记为非活动时被扫描以供重复使用。如果它们已被重用,它们将被标记为活动状态,并且某些其他页面必须从活动状态变为非活动状态以检测它是否处于活动使用状态。因此,不活动是用词不当。它是“可能不活跃,让我们试着验证一下”的简写。
正如您所发现的,我们(目前)争取的内部平衡大约是 2/3 活跃对 1/3 不活跃……
这解释了您观察到的行为。即您看到的非活动页面属于最近未使用的正在运行的程序。因此,当您启动一个新程序时,不活动的页面会被换出。同时,来自其他程序的页面被标记为非活动页面,以保持活动与非活动的 2/1 比率。
该线程还包含一些建议,以了解有关 darwin 内部结构的更多信息。如果您因为沙滩球问题(通常与此无关)而开始调查内存使用情况,也有一些建议。
结论是一样的:相信你的内核,不要试图超越它。:-)
如果您有足够的内存,您可以安全地禁用分页。
试试这些命令。
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*
Run Code Online (Sandbox Code Playgroud)
然后重新启动并验证 dynamic_pager 进程不再运行。
确保没有在/private/var/vm/.
要重新启用尝试以下命令:
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
Run Code Online (Sandbox Code Playgroud)
您还可以禁用 Spotlight 以释放更多内存并减少磁盘活动。以下命令用于禁用和启用 Spotlight。
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31387 次 |
| 最近记录: |