我正在考虑让 SSD 驱动器作为主操作系统分区运行。据我了解,这应该会显着提高性能。
交换分区将主要是随机搜索,因此应该受益于速度。另一方面,它将不断写入,这将更快地磨损驱动器。
我在 OS X 的日常使用中(以及根据互联网上的各种帖子显示的其他几种情况)中的一个常见现象,只要没有更多“可用”内存可用,系统似乎就会变慢。据称,这是由于交换造成的,因为明显的磁盘活动很重,并且 vm_stat 报告了许多页面输出。(纠正我的错误)
但是,当交换开始/发生/结束时,“非活动”内存的数量通常约为所有可用内存 (^1.) 的 12.5%-25%。
根据http://support.apple.com/kb/ht1342:
非活动内存
内存中的这些信息没有被积极使用,但最近被使用过。
例如,如果您一直在使用 Mail 然后退出它,Mail 使用的 RAM 将被标记为非活动内存。此非活动内存可供其他应用程序使用,就像空闲内存一样。但是,如果在其他应用程序使用其非活动内存之前打开 Mail,Mail 将打开得更快,因为它的非活动内存被转换为活动内存,而不是从较慢的硬盘加载邮件。
非活动列表包含当前驻留在物理内存中但最近未被访问的页面。这些页面包含有效数据,但可能随时从内存中释放。
所以,基本上:当一个程序退出时,它的内存被标记为 Inactive 并且应该可以随时声明。尽管如此,每当“可用”内存变低时,OS X 更愿意开始将内存换出到交换文件,而不是仅仅声明这块内存。
为什么?这种行为比立即释放非活动内存甚至不触及交换文件的优势是什么?一些消息来源 (^2.) 表明 OS X 会在释放“非活动”内存之前将其分页以进行交换,但是如果内存可能随时从内存中释放,现在这样做没有意义吗?交换很贵,释放很便宜,对吧?
可以使用某些偏好或已知的 hack 来改变这种行为吗?(最好是不包括完全禁用 swap/dynamic_pager 和重新启动...)
我很欣赏清除命令,以及修复磁盘权限以强制释放一些可用内存的概念,但这些是痛苦地强制更多可用内存而不是实际修复交换/释放决策逻辑的方法......
顺便说一句类似的问题在这里问:http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/这里:HTTP://hintsforums.macworld .com/showthread.php?t=87688但即使 OP 重新询问了核心问题,但没有任何回复给出了答案......
^1。2012 年 3 月 17 日更新自从我第一次发布这个问题以来,我已经从 4gb 到 8gb 的已安装内存,问题仍然存在。“非活动” ram 的数量以前是 0.5gb-1.0gb,现在在交换开始/发生/结束时通常约为 1.0-2.0GB,即似乎大约 12.5%-25% 的 ram 被 osx 保留为非活动状态内核逻辑。 …
如果一个进程需要大量内存,系统会将所有其他进程移动到交换文件中。似乎包括必要的进程,如 X11 服务器或终端。
因此,如果一个进程继续无限制地分配,一切都会变得无响应,直到该进程被 OOM 杀手杀死。我的笔记本电脑似乎特别灵敏,反应非常糟糕。我只是花了整整一个小时等待进程终止,在此期间甚至无法移动鼠标光标。
如何避免这种情况?
1)禁用交换=>我经常启动很多然后变得不活动的进程。不活动的应该移到交换区。
2) 买个 SSD => 太贵了
3) 设置最大内存 ulimit => 但如果程序需要合理的大量内存,它就会失败。问题不是它使用太多,而是它抑制了其他进程
4) 将重要的程序(X11、bash、kill、top 等)保存在内存中并且永远不要交换那些 => 可以这样做吗?如何?也许只交换大程序?
5) ?
VIM (gvim/macvim) 在哪里保存未保存/未命名缓冲区的交换文件?(如果确实如此)。
背景: 在一个半密集的研讨会中,当 MacBook 耗尽果汁并突然断电(它没有像往常那样睡眠/休眠)时,我在一个未命名/未保存的 MacVim 缓冲区中做笔记。
问题: 有人知道未保存的工作是否有可能已保存到交换 (.swp) 文件或类似文件中,并且可以恢复?
系统详细信息: 特别是在 Mac OS X 10.5.8 上使用 MacVim 时发生的这种情况(但其他版本的可能恢复提示也很有趣)。我还没有重新启动 MacVim,以防这样做会启动清理过程。
我没有在我的 PC 上设置交换分区,因为 a) 我有足够的 RAM (8 GB) 和 b) 我有大硬盘,我不想切成小块,所以我最小的分区是 50 GiB,我已经将它们用于操作系统。
现在,要休眠,我的 Linux (Ubuntu Jaunty) 需要交换。我有一个备用的 100 GB 分区,所以我将其设置为交换分区,但我对此并不满意。它只用于休眠(总是有足够的 RAM 可用并且系统永远不会进行交换),而且它对于交换来说也有点大。此外,我最终将需要它来做其他事情。
如何在 Ubuntu Jaunty 中没有交换分区的情况下休眠(挂起到磁盘)?
我有一个运行数据库和一堆 Java 应用程序服务器的 Ubuntu 8.04 服务器。其内存配置和使用情况为:
total used free shared buffers cached
Mem: 16456176 15930028 526148 0 81372 9674196
-/+ buffers/cache: 6174460 10281716
Swap: 1951888 366100 1585788
Run Code Online (Sandbox Code Playgroud)
我注意到交换每天下午都会增加,并在晚上的某个时间释放。每一天的需求都不一样,而且开始的时间也不同。所以它是非常随机的,除了模糊的“下午 - 晚上”边界。
这台机器上的负载在白天变化。它在午夜和早上 6 点到 7 点之间非常低,在下午 6 点到 8 点之前要高得多(但稳定),然后逐渐下降。
现在我有以下问题:
到目前为止,我已经能够将 Apple 的虚拟内存交换文件移动到硬盘驱动器上的专用分区。我一直在使用的技术在 forums.macosxhints.com 上的一个线程中进行了描述。
但是,随着 Snow Leopard 的开发者预览版,此方法不再有效。有谁知道如何使用新的操作系统来完成?
更新:我已将dblu 的答案标记为已接受,尽管它并没有完全奏效,因为他给出了出色、详细的说明,并且因为他的使用建议plutil
最终为我指明了正确的方向。完整的工作解决方案发布在问题中,因为我没有足够的声誉来编辑接受的答案。
更新 #2:更改程序以说明ekl 的技术,通过消除对中间 shell 脚本的需要,大大简化了整个过程:
完整的解决方案:
1.
打开终端并备份 Apple 的默认 dynamic_pager.plist:
$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}
Run Code Online (Sandbox Code Playgroud)
2.
将 plist 从二进制转换为纯 XML:
$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist
Run Code Online (Sandbox Code Playgroud)
3.
使用您选择的文本编辑器打开转换后的 plist。(我使用pico
,请参阅 dblu 的答案以获取使用示例vim
):
$ sudo pico -w com.apple.dynamic_pager.plist
Run Code Online (Sandbox Code Playgroud)
它应该如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">
<dict>
<key>EnableTransactions</key>
<true/> …
Run Code Online (Sandbox Code Playgroud) 根据我的个人经验,我注意到在 Windows XP 中禁用页面文件给了我最大的速度提升,这是我可以进行的任何其他软件更改。显然,这必须在有大量 RAM 可用时完成。通常我发现它与 +2GB 的 RAM 一起工作得很好。我真正遇到的唯一问题是加载 Adobe Photoshop。
这真的是速度的提高还是我想象的?
注意:为了真正关闭它,您不能只是将它设置为 0MB,而是禁用它。否则,Windows 只会在需要时扩展它以满足其需求。
我打算安装 Ubuntu 9.04 版本。我应该为交换分区分配多少空间。我记得我在很久以前安装时将其设置为 RAM 大小的两倍。当时我的内存是 256 MB。所以我将交换分区设置为 512 MB。