有没有办法阻止R在unix机器上使用任何虚拟内存?每当它发生时,都是因为我搞砸了然后我想中止计算.
我正在与其他几个人共享的强大计算机上处理大数据集.有时我会设置需要比可用内存更多RAM的命令,这会导致R开始交换并最终冻结整个机器.通常我可以通过ulimit
在我的设置中解决这个问题~/.bashrc
ulimit -m 33554432 -v 33554432 # 32 GB RAM of the total 64 GB
Run Code Online (Sandbox Code Playgroud)
这导致R抛出错误并在尝试分配比可用内存更多的内存时中止.但是,如果我在并行化(通常使用snow
包)时做出这种类型的错误,ulimit
则无效并且机器无论如何都会崩溃.我想这是因为snow
将工作程序作为不以bash运行的单独进程启动.如果我试着设置ulimit
我的~/.Rprofile
我只是得到一个错误:
> system("ulimit -m 33554432 -v 33554432")
ulimit: 1: too many arguments
Run Code Online (Sandbox Code Playgroud)
有人可以帮我找到实现这个目标的方法吗?
为什么我不能设置ulimit
0虚拟内存bash
?
$ ulimit -m 33554432 -v 0
Run Code Online (Sandbox Code Playgroud)
如果我这样做很快就会关闭.
Kaz*_*Kaz 11
当您system("ulimit")
在子进程中执行时运行.父级不ulimit
从父级继承.(这是做的system("cd dir")
,或者system("export ENV_VAR=foo")
.
在启动环境的shell中设置它是正确的方法.该限制在并行情况下不起作用,因为它是每进程限制,而不是全局系统限制.
在Linux上,您可以配置strict(er)overcommit accounting,它试图阻止内核处理mmap
无法由物理内存支持的请求.
这是通过调整sysctl的参数做vm.overcommit_memory
和vm.overcommit_ratio
.(谷歌有关这些.)
这可以是防止颠簸情况的有效方法.但是权衡的是,当事情表现良好时,你会失去过度使用所带来的好处(将更多/更大的进程塞进内存中).