内存泄漏,关闭连接

时间:2016-11-10 08:03:07

标签: r memory-leaks connection stdin

我有一个R应用程序通过stdinstdout在无限循环中与Java守护进程交互,这似乎有一些内存泄漏。简化的R app:

while (TRUE) {
    con <- file('stdin', open = 'r', blocking = TRUE)
    line <- scan(con, what = character(0), nlines = 1, quiet = TRUE)
    close(con)
}

这个循环最终使用越来越多的RAM,即使我在gc()调用之后手动close(con),内存占用似乎还有一段时间,但最终会永远增长。

确认这一点的基本脚本:

Rscript --vanilla -e "while(TRUE)cat(runif(1),'\n')" | Rscript --vanilla -e "cat(Sys.getpid(), '\n');while (TRUE) {con <- file('stdin', open = 'r', blocking = TRUE);line <- scan(con, what = character(0), nlines = 1, quiet = TRUE);close(con);gc()}"

这将启动两个R进程:一个写入stdout,另一个写入stdin与管道连接(第二个打印pid,以便您可以监视相关内存使用情况):

enter image description here

我不确定我做错了什么,但是我很乐意阻止这种内存泄漏,所以我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

确实(关于在(&thing.a)[2]上阅读此内容); 值得注意的是,由于Gabor Csardi的补丁,内存泄漏现已插入R的开发版本中。