看起来我们在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
有关如何解决此问题的任何想法?
由于
答案 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 })