【发布时间】:2012-05-05 09:42:17
【问题描述】:
短版
有没有办法阻止 R 在 unix 机器上使用任何虚拟内存?每当发生这种情况时,都是因为我搞砸了,然后我想中止计算。
加长版
我正在与其他几个人共享的强大计算机上处理大型数据集。有时我会启动需要更多 RAM 的命令,这会导致 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
如果我这样做会很快关闭。
【问题讨论】:
-
请参阅my answer to the linked question 以获取允许为正在运行的 R 会话设置
ulimit的 R 包。