2016-11-10 1 views
6

stdinstdout을 통해 Java 데몬과 상호 작용하는 R 응용 프로그램이 무한 루프에 있는데, 이는 약간의 메모리 누수가있는 것으로 보입니다. 단순화 된 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

내가 잘못 뭘하는지 모르겠지만, 그래서 어떤 도움이 높게 평가되고이 메모리 누수를 중지 싶어요.

+0

토론에 관심이있는 분이라면 [R-devel] (https://stat.ethz.ch/pipermail/r-devel/2016-November/thread.html#73360) – daroczig

답변

2

실제로 (대략 R-devel에 대해 읽음); 특히 Gabor Csardi의 패치 덕분에 메모리 누수가 개발 버전 R에 꽂혀 있습니다.

+0

에서 더 많은 관심을 받았다. 너는 대단히, 마틴 마 츨러! – daroczig

+0

나는 이것이 R 3.3.3+가 패치되어야한다고 제안한다. –

+0

패치는 3.4.0 버전의 R 릴리스 (11 월 2 일부터)에 릴리스되었습니다. 3.4.2는 현재입니다 (2 일 전부터!). 우리는 패치를 백 포트하지 않습니다. 이렇게하기 위해서는 자원 (= 인간 시간)이없는 많은 작업이 될 수 있습니다. (가능한 경우 최신 릴리스로 업그레이드하는 "모든 사용자"를 원합니다 .-)) –

관련 문제