强制流浪者使用交换记忆

时间:2015-01-18 15:51:14

标签: out-of-memory vagrant osx-yosemite

我有一台带有2 + 2 GB内存的首批alu iMac。我使用Vagrant来模拟高级开发环境,为不同的工作分开。

当我只有一个流浪汉进程在后台运行时,计算机变得很慢,因为它总是内存不足。

问题是:我可以使用vagrant(或任何应用程序)仅在交换内存上运行,因此它会为操作系统和其他应用程序留下所有内存吗?

如果有任何解决方案,我该怎么做?

2 个答案:

答案 0 :(得分:1)

简短的回答是:不,进程无法完全在交换中运行。

进程必须将其数据存储在RAM中,以便CPU能够对其进行操作,当内存中没有可用空间可用于加载的所有内容时,不经常使用的数据会被移出到交换空间。

您可以创建一个更大的交换空间并使用ulimit来限制进程使用的内存量(即强制它们更早地交换),但这并不能真正解决问题的根源 - 你几乎达到了4GB内存的极限。

请记住,使用交换空间始终会产生性能问题,因为(即使使用SSD)从磁盘读取的速度远远低于从内存中读取的速度。

如果没有升级到更多内存,你可以:

  • 减少流浪盒分配的内存量;
  • 使用OS X的活动监视器来识别和关闭任何未使用但仍在使用内存的程序/进程。

但是,这些只是一种止损解决方案。

答案 1 :(得分:1)

简单的答案是否定的。

控制swappiness必须在VM内完成,例如Linux,echo 100 > /proc/sys/vm/swappiness将交换策略设置为最积极的模式。请记住,您无法控制进程的运行位置(物理内存VS交换)

然而,通过这样做,您的主机/访客仍然会很慢,因为您没有足够的物理内存。

最终的解决方案是为您的iMAC添加更多内存;-D