问题 在Linux下限制R中的内存使用量


我们在Linux集群环境中运行R.当用户无意中使用R进程占用所有内存时,头节点有一些挂起。有没有办法限制Linux下的R内存使用?我宁愿不建议全球性的ulimits,但这可能是前进的唯一途径。


4103
2017-09-25 12:17


起源

我之前也遇到过这个问题(链接),这可能与您的问题有关。我们最终解决的解决方案是完全禁用机器上的内存过量使用。这是一个直接的解决方案,但工作得很好。 - Backlin
如果,偶然的话,你使用 RStudio服务器,您可以通过添加类似的行来设置用户限制 rsession-memory-limit-mb=4000 至 /etc/rstudio/rserver.conf - GSee
这是 unix.stackexchange.com/questions/44985/... 有用? (也就是说,不是特定于R的方法,但是如果你能想出一个适用于你的操作系统的通用的每个进程解决方案,那么你可以设置一个R的别名来强加它...看起来像这样 github.com/pshved/timeout 会特别有用 - Ben Bolker
ulimit 工作正常,直到您想要使用所有核心。 - otsaw


答案:


?"Memory-limits" 建议使用 ulimit 要么 limit

有一个命令行标志: --max-mem-size 哪个可以设置 初始 限制。这可以由用户在会话期间通过使用来增加 memory.limit


8
2017-09-25 12:53



谢谢,詹姆斯。 --max-mem-size现在已从R和memory.limit消失,仅适用于Windows。 ulimit和limit看起来是唯一的出路。 - seandavi


我创建了一个小R包, ulimit,允许使用运行R进程设置内存限制 同样的机制 也用于 ulimit 在壳中。目前该软件包不适用于Windows - 使用 memory.limit() 来自 utils 如果你运行Windows包。 编辑:它也不适用于“其他”POSIX平台 - ulimit -v 对OS X没有影响...

使用从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

包装是功能性的,但在很早的阶段。支持Windows是 计划 但尚未实施。非常感谢您的反馈!


8
2018-06-29 10:44



正如你在GitHub上所说的那样,这只能在三个操作系统中的两个操作系统上工作,而大多数新手都可以在第三个操作系统上工作。可能值得注意到这里的某个地方...... - Dirk Eddelbuettel
@DirkEddelbuettel:好点。 Windows用户似乎有 memory.limiit() 他们支配。我的第一个目标是为我的系统启动并运行... - krlmlr
@krlmlr请解释这是如何必要的 mran.revolutionanalytics.com/.is 可用。它是以某种方式补充它吗? - SemanticBeeng
@SemanticBeeng:我不明白这个问题。什么是“这个”,它与MRAN有什么关系?你是什么意思“补充”? - krlmlr
@krlmlr,看我发布了一个破链接。意思是参考 revolutionanalytics.com/revolution-r-open 事实上,这种实现不应局限于RAM如何管理数据。看到 revolutionanalytics.com/revolution-r-enterprise-scaler :“没有内存障碍革命R企业ScaleR算法被实现为并行外部存储器算法(PEMA)。通过管理可用RAM和永久存储,PEMA能够分析超出可用内存限制的数据。”我的观点现在更有意义吗? - SemanticBeeng