【问题标题】:RJDBC(dbGetQuery) - GC overhead limit exceededRJDBC(dbGetQuery) - 超出 GC 开销限制
【发布时间】:2017-03-21 17:40:18
【问题描述】:

我正在使用 RJDBC 包和函数 dbGetQuery 来获取 SQL 查询的输出。该代码适用于行数不多的 SQL 语句,但是哪些行 > 1.000.000 的语句会出错。有处理内存的参数吗?

dbGetQuery(conn,"SQL..")

然后我收到以下错误消息:

.jcall(rp, "I", "fetch", stride, block) 中的错误:
java.lang.OutOfMemoryError: 超出 GC 开销限制

谢谢! R007

【问题讨论】:

  • 我找到了一些关于 java 堆空间的信息并设置了这个选项: options(java.parameters = "- Xmx1024m") 但这不是解决方案......现在我得到了一个 java 堆大小错误。如何获取此设置的默认值?

标签: r rjdbc


【解决方案1】:

正如本文所提到的,在加载库之前将 java 参数参数放在代码的顶部应该会增加默认的 512 MB 堆大小。如果您已经加载了包,则需要重新启动 R 并重新运行代码以应用更改。

https://www.ibm.com/support/pages/executing-code-r-connecting-impala-jdbc-rjdbc-results-error-jcallrp-i-fetch-stride-javalangoutofmemoryerror-java-heap-space-rjdbcdbgetquery-gc-overhead-limit-exceeded

# Do this first    
options(java.parameters = "-Xmx4g")

# Then load your libraries
library(XLConnect)
library(RJDBC)

接下来,您可以根据需要使用 XLConnect 包随时释放 Java 内存。

# Free up java memory
XLConnect::xlcFreeMemory()

如果您像我一样运行一个巨大的循环,您可能希望将其插入循环中以释放内存,然后再重新进入并再次运行。

当然是在运行代码之前安装包:

# Install XLConnect
install.packages("XLConnect")

这两件事加在一起可能足以解决您的问题。

可在此处找到有关此主题的进一步阅读: "Out of Memory Error (Java)" when using R and XLConnect package

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 2017-12-27
    • 2013-07-13
    • 2018-03-29
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多