内存泄漏,关闭连接

dar*_*zig 6 connection stdin memory-leaks r

我有一个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)
}
Run Code Online (Sandbox Code Playgroud)

这个循环最终使用越来越多的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()}"
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

我不确定我做错了什么,但我很乐意阻止这种内存泄漏,所以任何帮助都会受到高度赞赏.

Mar*_*ler 2

确实(关于在 上阅读有关此内容的信息R-devel);值得注意的是,由于 Gabor Csardi 的补丁,内存泄漏问题现已被修复在 R 的开发版本中。