禁用 Mac 的 dynamic_pager?

Pep*_*ijn 7 memory swap macos

我读了这篇关于 Mac OS X 内存管理的博客文章:http : //workstuff.tumblr.com/post/20464780085/something-is-deeply-broken-in-os-x-memory-management

我想听听你对此事的意见。

我“只有”4GB 的内存,因此存在内核崩溃的可能性。

我确实有一个旋转磁盘(而不是 SSD)并且偶尔会看到沙滩球,有时甚至在继续之前旋转我的外部 HD。

活动监视器屏幕

它说目前没有使用交换,这是否意味着禁用 dynamic_pager 将什么也不做?它确实有一些页面插入。

尝试一下有多安全?我也许可以编写一个脚本,当内存变低时重新启用寻呼机?

[更新]:一天结束,26MB 交换,更多的页面进出,以及大量非活动内存。

小智 9

OS X 存在三个导致此问题的问题:

  1. 默认情况下,任何写入磁盘或从磁盘读取的数据都以比最近的程序数据更高的优先级缓存在 RAM 中。应用程序可以在每个描述符的基础上禁用它,并F_NOCACHE选择fcntl(),但很少有人这样做。因此,大量磁盘活动会导致此时未使用的内存被换出。这会在原始磁盘活动之上创建更多的磁盘活动,用于交换和稍后读取该内存。

  2. HFS+ 不能很好地处理并发文件访问。特别是,一次打开和关闭许多不同的文件会产生巨大的争用,并且一次几乎只能进行一次打开/关闭操作。

  3. 许多 OS X 应用程序将它们的磁盘访问分散到许多小文件中。

因此,当两个或多个应用程序试图同时访问大量文件时,磁盘 I/O 负载会随着交换活动与应用程序竞争 I/O 呈指数增长。

禁用动态分页器可能会通过删除将私有/脏应用程序页面推送到磁盘的能力来阻止该指数曲线的早期部分。相反,系统可能会从公共/干净的映射文件(可执行文件、库等)和缓存的文件数据中清除页面,这些数据可能一开始就不应该被缓存。这是否真的提高了性能将在很大程度上取决于您使用的应用程序。例如,Safari 在管理其磁盘 I/O 方面非常糟糕,所以我想这会有所帮助。

如果实际需要的 RAM 量超过可用量,就会出现问题:恐慌崩溃是结束一天的一种非常突然的方式。但是,如果您不是在编辑大文件或以其他方式进行固有的内存密集型操作,那么这种情况可能很少见,需要考虑冒险。

顺便说一句,您可以使用该lsof命令查看哪些文件被哪些进程打开,以及该fs_usage命令查看文件操作的运行日志。当以 root 或 via 运行时,两者都可以更好地工作sudo