我有一个 R 应用程序通过 stdin
与 Java 守护进程交互和 stdout
在无限循环中,这似乎有一些内存泄漏。简化的 R 应用程序:
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
以便您可以监控相关的内存使用情况):我不确定我做错了什么,但很想阻止这种内存泄漏,因此非常感谢任何帮助。
最佳答案
确实(关于在 R-devel
上阅读此内容);
值得注意的是,由于 Gabor Csardi 的补丁,内存泄漏现在已经被插入到 R 的开发版本中。
关于r - 连接关闭的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40522584/