与关闭的连接的内存泄漏
我具有R应用与Java守护程序经由stdin
和stdout
在一个无限循环,它似乎有一些内存泄漏交互。简化[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
这样就可以监测相关的内存使用情况):
我不知道我做错了什么,而是希望能阻止这种内存泄漏因此任何帮助是高度赞赏。
事实上(关于R-devel
阅读本); 值得注意的是,内存泄漏目前已插入R的开发版本,这要感谢的Gabor Csardi补丁。
感谢你非常,@ martin-mächler! – daroczig
我认为这表明应该修补R 3.3.3+。 –
贴剂使它成为下一个(从Nov.2016)R释放这一直3.4.0。 3.4.2是最新的(自2天前!)。我们不反向移植补丁:要做到这一点真的可以安全地被大量的工作,我们没有足够的资源(=人时间)。 ((如果可能,我们希望“所有人”都升级到最新版本:-)) –
如果有人对这个讨论感兴趣,那么这个问题就会受到[R-devel](https://stat.ethz.ch/pipermail/r-devel/2016-November/thread.html#73360)的更多牵引 – daroczig