我正在尝试将R连接到Teradata以将数据直接拉入R进行分析。但是,我收到错误,
Error in .jcall(rp, "I", "fetch", stride, block) :
java.lang.OutOfMemoryError: Java heap space
我尝试设置我的R选项以通过执行以下操作来增加JVM的最大堆大小:
options(java.parameters = "-Xmx8g")
我还尝试使用rJava函数.jinit
初始化java参数:.jinit(parameters="-Xmx8g")
。
但仍然失败了。
计算出的数据大小应约为3G(实际上小于3G)。
答案 0 :(得分:22)
您需要确保在加载rJava或任何其他软件包之前分配额外的内存。首先擦除环境(通过rm(list = ls())
),如果必须,重新启动R / Rstudio,并修改脚本开头的选项。
options(java.parameters = "-Xmx8000m")
答案 1 :(得分:1)
我以某种无法再现的方式遇到了这个问题,用-Xmx8g
部分地解决了这个问题,但是随机遇到了问题。
我现在通过使用
找到了一个具有其他垃圾收集器的选项options(java.parameters = c("-XX:+UseConcMarkSweepGC", "-Xmx8192m"))
library(xlsx)
脚本开头的。到目前为止,该问题不再发生。
编辑:
我弄清楚了,我们甚至可以组合多个java参数。因此,该解决方案到目前为止并未失败。
编辑2:
因此,关于这一解决方案,还有一件事情,我今天想通了,在加载任何其他软件包之前执行options
命令是很省钱的!!!由于某些软件包本身会加载一些Java东西,因此必须在R会话的开始时设置选项!
答案 2 :(得分:1)
在 Mac 上运行以下两行代码(在加载任何包之前)对我有用:
options(java.parameters = c("-XX:+UseConcMarkSweepGC", "-Xmx8192m"))
gc()
这基本上结合了之前在此处发布的两个建议:重要的是,仅运行第一行(如 drmariod 所建议的)并不能解决我的问题。但是,当我在第一行之后(如 user2961057 建议的那样)另外执行 gc()
时,问题就解决了。
如果它仍然不起作用,请重新启动 R 会话,然后尝试(在加载任何包之前)改为 options(java.parameters = "-Xmx8g")
,然后直接执行 gc()
。或者,尝试将 RAM 从 "-Xmx8g"
进一步增加到例如"-Xmx16g"
(前提是您至少有同样多的 RAM)。
编辑:进一步的解决方案:虽然我不得不在 R 中使用 rJava 进行模型估计(从大量 X 中解释了 y),但我一直收到上述信息'OutOfMemory' 错误,即使我扩展到 "-Xmx60000m"
(我使用的机器有 64 GB RAM)。问题是某些型号规格太大了(并且需要更多的 RAM)。在这种情况下可能有帮助的一种解决方案是缩小问题的规模(例如,通过减少模型中 X 的数量),或者——如果可能的话——将问题分成独立的部分,分别估计每个部分,然后将这些部分放在一起再次。
答案 3 :(得分:-1)
我添加了垃圾回收,这为我解决了这个问题。我正在使用RJDBC连接到Oracle数据库。
只需添加gc()