错误:向量内存耗尽(达到限制?)R 3.5.0 macOS
Posted
技术标签:
【中文标题】错误:向量内存耗尽(达到限制?)R 3.5.0 macOS【英文标题】:Error: vector memory exhausted (limit reached?) R 3.5.0 macOS 【发布时间】:2018-12-17 07:11:42 【问题描述】:我一直在处理一些包含基因表达数据的大文件,最近在升级到 R 3.5.0 后,我遇到了将这些数据加载到 R 中的问题。使用大约 8GB 内存(我的 mac 有 16GB RAM)后,如果我尝试读取另一个文件,我会收到以下错误:
Error: vector memory exhausted (limit reached?)
我发现之前的帖子 (Error: vector memory exhausted (limit reached?)) 建议我尝试将环境变量 R_MAX_VSIZE 设置为更高的值,因此我尝试了以下操作:
Sys.setenv(R_MAX_VSIZE = 16e9)
但是,我仍然遇到同样的错误。我没有正确设置环境变量吗?有什么我遗漏的吗?
会话信息:
R version 3.5.0 (2018-04-23)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.5
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
locale:[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages: [1] data.table_1.11.4
loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0
【问题讨论】:
我在 R 3.5.0 中的超级随机时间收到“错误:矢量内存已用尽(达到限制?)”......我检查了内存已用完,R 在 16GB 上大约有 2GB mac 笔记本电脑。显然不是内存不足。Sys.setenv('R_MAX_VSIZE'=32000000000)
正确设置了变量,但无论如何都会再次出现错误。
我对 R 3.5.1 有同样的问题。我的 Mac 有 8GB 内存,出现错误时使用了 80%,所以显然不是因为我的内存不足。当我调用 gc()
时,Sys.setenv('R_MAX_VSIZE'=32000000000)
不会更改 limit
术语。我可以访问一个没有向量内存限制的服务器,所以我必须使用它。
【参考方案1】:
对命令行不熟悉的朋友可以找到here:
简而言之,解决方案是使用usethis
包。
usethis::edit_r_environ()
将打开您主目录中的 .Renviron。这个 .Renviron 会影响所有 Rstudio 工作
usethis::edit_r_environ("project")
将在您的项目本地打开一个 .Renviron。对此文件所做的更改只会影响在该特定 Rstudio 项目中完成的工作。
打开后,可以设置R_MAX_VSIZE
var。
链接页面还链接到this blog,它非常详细地描述了 R 的启动过程。
【讨论】:
只是一个澄清说明。在上面的代码中,参数的字面意思是“项目”。它不会被替换为您的项目名称。 这真的很简单,谢谢!必须对“R_MAX_VSIZE”值进行一些试验才能确定足够大的值。在 64Gb 时,它可以正常运行。【参考方案2】:对于那些使用 Rstudio 的人,我发现设置 Sys.setenv('R_MAX_VSIZE'=32000000000)
只能在命令行上工作,并且在使用 Rstudio 时设置该参数并不能防止此错误:
Error: vector memory exhausted (limit reached?)
又看了几遍,找到this线程,说明了Rstudio的问题,并确定了解决方案,如下图:
第一步:打开终端,
第 2 步:
cd ~
touch .Renviron
open .Renviron
第三步:将以下内容另存为.Renviron
的第一行:
R_MAX_VSIZE=100Gb
注意:此限制包括物理内存和虚拟内存;因此在具有 16Gb 物理内存的机器上设置 _MAX_VSIZE=16Gb 可能无法防止此错误。您可能必须使用此参数,具体取决于您机器的规格
【讨论】:
【参考方案3】:R 3.5 对内存分配有一个新的系统限制。来自发行说明:
现在可以使用环境变量 R_MAX_VSIZE 来指定 最大向量堆大小。在 macOS 上,除非另有说明 环境变量,最大向量堆大小设置为 最大 16GB 和可用的物理内存。这是为了 避免在 macOS 过度使用内存时杀死 R 进程。
您可以覆盖它。您冒着过度分配和终止进程的风险,但如果您使用 R 3.4.4 或您之前使用的任何东西撞到硬墙,这可能就是发生的情况。
在终端中执行以下命令来创建一个临时环境变量R_MAX_VSIZE
,值为32GB(更改为适合):
export R_MAX_VSIZE=32000000000
或者,如果您不想在每次想要启动 R 会话时打开终端并运行它,您可以将同一行附加到您的 bash 配置文件中。打开终端并找到您的 bash 配置文件 open .bash_profile
,然后在文本编辑器中添加上面的行。
您仍然需要打开终端并从那里启动 R。您可以通过执行R
在终端中运行R,也可以打开GUI open -n /Applications/R.app
。
要在 R 会话中进行此更改,请使用 Sys.setenv('R_MAX_VSIZE'=32000000000)
并检查值使用Sys.getenv('R_MAX_VSIZE')
【讨论】:
不能为我解决问题。悲伤的脸。 @GordonMcdonald 也许我们可以提供更多信息。您是否发现在更新 R 之后,您使用更新前没有问题执行的代码得到向量内存错误?如果是这种情况,如果您向上调整分配给R_MAX_SIZE
的号码,此解决方案可能会有所帮助。
@GordonMcDonald Sys.setenv('R_MAX_VSIZE'=32000000000)
对我不起作用。 Apparently,您不能设置 R_MAX_VSIZE after R is started。使用@GraemeFrost 提供的答案对我有用。以上是关于错误:向量内存耗尽(达到限制?)R 3.5.0 macOS的主要内容,如果未能解决你的问题,请参考以下文章