与关闭的连接的内存泄漏

问题描述:

我具有R应用与Java守护程序经由stdinstdout在一个无限循环,它似乎有一些内存泄漏交互。简化[R应用:与关闭的连接的内存泄漏

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

这个循环结束了使用越来越多的内存,即使我的close(con)通话后手动gc(),内存占用似乎一会儿是OK,但最终还是永远增长。

一个基本的脚本,以确认这一点:

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

我不知道我做错了什么,而是希望能阻止这种内存泄漏因此任何帮助是高度赞赏。

+0

如果有人对这个讨论感兴趣,那么这个问题就会受到[R-devel](https://stat.ethz.ch/pipermail/r-devel/2016-November/thread.html#73360)的更多牵引 – daroczig

事实上(关于R-devel阅读本); 值得注意的是,内存泄漏目前已插入R的开发版本,这要感谢的Gabor Csardi补丁。

+0

感谢你非常,@ martin-mächler! – daroczig

+0

我认为这表明应该修补R 3.3.3+。 –

+0

贴剂使它成为下一个(从Nov.2016)R释放这一直3.4.0。 3.4.2是最新的(自2天前!)。我们不反向移植补丁:要做到这一点真的可以安全地被大量的工作,我们没有足够的资源(=人时间)。 ((如果可能,我们希望“所有人”都升级到最新版本:-)) –