限制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"
建议使用ulimit
或limit
。
有一个命令行标志:--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中的内存使用的主要内容,如果未能解决你的问题,请参考以下文章