在getURL方法中RCurl内存泄漏

时间:2014-10-24 21:34:35

标签: r memory-leaks rcurl

看起来我们在RCurl中遇到了一个错误。方法getURL似乎是泄漏内存。这里给出了一个重现错误的简单测试用例:

library(RCurl)
handle<-getCurlHandle()
range<-1:100
for (r in range) {x<-getURL(url="news.google.com.au",curl=handle)}

如果我运行此代码,则永远不会恢复分配给R会话的内存。

我们正在使用RCurl进行一些长时间运行的实验,而且我们的测试系统内存不足。

我们测试系统的规格如下:

操作系统:Ubuntu 14.04(64位)

内存:24 GB

RCurl版本:1.95-4.3

有关如何解决此问题的任何想法?

由于

2 个答案:

答案 0 :(得分:4)

查看getURLContent()是否也出现问题,即将getURL()替换为getURLContent()。 函数getURLContent()getURL()的更丰富版本,并且受到更多关注。

答案 1 :(得分:1)

我也打了这个,并进行了以下代码更改以解决它:

LEAK(旧代码)

h = basicHeaderGatherer()
tmp = tryCatch(getURL(url = url,
                      headerfunction = h$update,
                      useragent = R.version.string,
                      timeout = timeout_secs),
               error = function(x) { .__curlError <<- TRUE; __curlErrorMessage <<- x$message })

没有泄漏(新密码)

method <- "GET"
h <- basicHeaderGatherer()
t <- basicTextGatherer()
tmp <- tryCatch(curlPerform(url = url,
                            customrequest = method,
                            writefunction = t$update,
                            headerfunction = h$update,
                            useragent=R.version.string,
                            verbose = FALSE,
                            timeout = timeout_secs),
                error = function(x) { .__curlError <<- TRUE; .__curlErrorMessage <<- x$message })