Mam aplikację R współdziałającą z demonem Java poprzez stdin
i stdout
w nieskończonej pętli, która wydaje się mieć pewne wycieki pamięci. Uproszczona aplikacja R:Wyciek pamięci przy zamkniętych połączeniach
while (TRUE) {
con <- file('stdin', open = 'r', blocking = TRUE)
line <- scan(con, what = character(0), nlines = 1, quiet = TRUE)
close(con)
}
Ta pętla kończy się przy użyciu więcej i więcej pamięci RAM, a nawet gdybym ręcznie gc()
po wywołaniu close(con)
, ślad pamięci wydaje się być OK na chwilę, ale w końcu zawsze rośnie.
podstawowy skrypt, aby to potwierdzić:
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()}"
Ten rozpocznie dwa procesy R: jedno pismo do stdout
a drugi odczyt z stdin
połączony z rurą (a drugi drukowanie pid
, dzięki czemu można monitorować związane zużycie pamięci):
nie jestem pewien, co robię źle, ale chciałbym, aby zatrzymać ten przeciek pamięci, więc każda pomoc jest bardzo ceniona.
Jeśli ktoś interesuje się dyskusją, pytanie uzyskało więcej trakcji na [R-devel] (https://stat.ethz.ch/pipermail/r-devel/2016-November/thread.html#73360) – daroczig