我们正在一个Linux群集环境下运行R。当用户无意中使用R处理过程占用了所有内存时,主节点将卡死。是否有一种方法可以在Linux下限制R的内存使用?我不想建议全局ulimit,但这可能是唯一的出路。
我们正在一个Linux群集环境下运行R。当用户无意中使用R处理过程占用了所有内存时,主节点将卡死。是否有一种方法可以在Linux下限制R的内存使用?我不想建议全局ulimit,但这可能是唯一的出路。
有unix::rlimit_as()
这个函数,可以使用与shell中ulimit
相同的机制为运行中的R进程设置内存限制。但是Windows和macOS不支持。
在我的.Rprofile
文件中,我有以下代码:
unix::rlimit_as(1e12, 1e12)
将内存使用限制在约12 GB。
我创建了一个名为 ulimit
的小型 R 包,具有类似的功能。
从 GitHub 安装它,使用以下命令:
devtools::install_github("krlmlr/ulimit")
要将可用于 R 的内存限制为 2000 MiB,请调用:
ulimit::memory_limit(2000)
> rep(0L, 1e9)
Error: cannot allocate vector of size 3.7 Gb
内存限制
建议使用ulimit
或limit
。
有一个命令行标志:--max-mem-size
,可以设置初始限制。用户可以在会话期间使用memory.limit
来增加它。
/etc/rstudio/rserver.conf
中添加像rsession-memory-limit-mb = 4000
这样的行来设置用户限制。 - GSeeulimit
在你想要使用所有核心时就无法正常工作了。 - otsaw