防止R在UNIX / Linux上使用虚拟内存?

简洁版本

有没有办法阻止R在unix机器上使用任何虚拟内存? 每当它发生,这是因为我搞砸了,然后我想中止计算。

更长的版本

我正在与其他几个人共享一个function强大的计算机上的大数据集。 有时候我会发起需要更多内存的命令,导致R开始交换并最终冻结整个机器。 通常我可以通过在~/.bashrc设置一个ulimit来解决这个问题

 ulimit -m 33554432 -v 33554432 # 32 GB RAM of the total 64 GB 

这会导致R在尝试分配比可用内存更多的内存时抛出错误并中止。 但是,如果在平行化(通常使用snow包)时出现这种错误, ulimit不起作用,机器崩溃。 我想这是因为snow将工作人员作为单独的进程启动,而不是在bash中运行。 如果我尝试在~/.Rprofile设置ulimit ,我只是得到一个错误:

 > system("ulimit -m 33554432 -v 33554432") ulimit: 1: too many arguments 

有人可以帮我找出一个办法来实现这个目标吗?

侧轨

为什么我不能在bash设置一个0虚拟内存的ulimit

 $ ulimit -m 33554432 -v 0 

如果我这样做,很快就会closures。

Solutions Collecting From Web of "防止R在UNIX / Linux上使用虚拟内存?"

运行在子进程中执行的system("ulimit") 。 父级不从父级继承ulimit 。 (这是做system("cd dir")system("export ENV_VAR=foo")

将其设置在启动环境的shell中是正确的方法。 这种限制在并行情况下不起作用,很可能是因为它是按进程限制的,而不是全局系统限制。

在Linux上,您可以配置严格的(过度使用)记帐,以防止内核处理不能被物理内存支持的mmap请求。

这是通过调整sysctl参数vm.overcommit_memoryvm.overcommit_ratio 。 (谷歌关于这些。)

这可以是防止颠簸的有效方法。 但是,权衡是因为当事情行为良好时(即将更多/更大的进程填充到内存中),您失去了过度使用所提供的好处。