限制Linux下R中的内存使用

Posted

技术标签:

【中文标题】限制Linux下R中的内存使用【英文标题】:limiting memory usage in R under linux 【发布时间】:2012-09-16 23:04:12 【问题描述】:

我们在 linux 集群环境中运行 R。当用户无意中使用 R 进程占用了所有内存时,头节点有几次挂起。有没有办法限制linux下的R内存使用?我宁愿不建议使用全局 ulimit,但这可能是唯一的出路。

【问题讨论】:

我之前也遇到过这个问题(link),这可能与您的问题有关。我们最终得到的解决方案是完全禁用机器上的内存过度使用。这是一个生硬的解决方案,但效果很好。 如果您偶然使用了RStudio server,您可以通过在/etc/rstudio/rserver.conf 中添加类似rsession-memory-limit-mb=4000 的行来设置用户限制 这个unix.stackexchange.com/questions/44985/…有用吗? (即,不是特定于 R 的方法,但如果您可以提出适用于您的操作系统的通用的每进程解决方案,那么您可以为 R 设置一个别名来强加它......看起来像这样github.com/pshved/timeout会特别有用 ulimit 工作正常,直到您想使用所有内核。 【参考方案1】:

?"Memory-limits" 建议使用ulimitlimit

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

【讨论】:

谢谢,詹姆斯。 --max-mem-size 现在从 R 和 memory.limit 中消失了,仅适用于 Windows。 ulimit 和 limit 看起来是唯一的出路。【参考方案2】:

unix::rlimit_as() 允许使用 the same mechanism 为正在运行的 R 进程设置内存限制,ulimit 在 shell 中也可以使用。不支持 Windows 和 macOS。

在我的.Rprofile 我有

unix::rlimit_as(1e12, 1e12)

将内存使用限制为 ~12 GB。

在那之前...

我创建了一个小型 R 包,ulimit,具有类似的功能。

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

【讨论】:

正如您在 GitHub 上所说,这仅适用于三个操作系统中的两个,大多数新手在第三个操作系统上工作。可能值得在这里的某个地方注意...... @DirkEddelbuettel:好点。 Windows 用户似乎可以使用memory.limiit()。我的第一个目标是让它为我的系统启动并运行...... @krlmlr 请解释鉴于mran.revolutionanalytics.com/.is 可用,这是多么必要。它是否以某种方式对其进行了补充? 有计划把这个放到 CRAN 上吗? @MichaelChirico:暂时没有,计划以某种方式将其与 RAppArmor 合并,RAppArmor 提供更多 ulimit API,但有其他缺点。

以上是关于限制Linux下R中的内存使用的主要内容,如果未能解决你的问题,请参考以下文章

服务器内存最大大小限制

r 增加R中的内存限制

Ubuntu下限制进程使用内存资源的方法(cgroup)

扩展 R 中的内存大小限制

是否可以增加 R 中的内存限制

Windows下使用WSRM限制MongoDB内存