我有一个使用stdin和stdout与Java守护进程交互的R应用程序,进入了一个无限循环,似乎存在一些内存泄漏问题。简化后的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()
,内存占用似乎一段时间内正常,但最终会无限增长。
一个确认这一点的基本脚本:
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
以便您可以监视相关的内存使用情况):
我不确定我哪里做错了,但是任何帮助来阻止这个内存泄漏都非常感激。