【问题标题】:limiting memory usage in R under linux限制Linux下R中的内存使用
【发布时间】: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 工作正常,直到您想使用所有内核。

标签: linux r memory-management


【解决方案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,但有其他缺点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多