r - 连接关闭的内存泄漏

标签 r memory-leaks connection stdin

我有一个 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 以便您可以监控相关的内存使用情况):

enter image description here

我不确定我做错了什么,但很想阻止这种内存泄漏,因此非常感谢任何帮助。

最佳答案

确实(关于在 R-devel 上阅读此内容);
值得注意的是,由于 Gabor Csardi 的补丁,内存泄漏现在已经被插入到 R 的开发版本中。

关于r - 连接关闭的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40522584/

相关文章:

perl - 如何在长时间运行的 Perl 程序中发现内存泄漏?

c++ - 二维动态数组的值在循环迭代期间被损坏

networking - 人为制造连接超时错误

r - 编辑shiny.tag元素

r - 在 R 中跳过 sprintf 格式字符串中的参数

java socket对象内存泄漏

java - MongoDB 和 Java 连接错误

java - 创建与 ESB(Web 逻辑,连接工厂)java 的连接

r - 过滤每组中间行

regex - 在字符串中的第一个逗号处拆分