R에서 메모리 지우기

Gustavo du Mortier 2021년3월12일
R에서 메모리 지우기

한동안 R 스크립트로 작업 한 후 R 환경은 많은 메모리 내 데이터를 저장하여 컴퓨터 리소스의 상당 부분을 보류 할 수 있습니다. 이 상황은 더 이상 메모리를 할당 할 수 없기 때문에 R 시스템이 코드 실행을 거부하는 결과를 초래할 수 있습니다. R 환경을 다시 시작하더라도 메모리가 확보되지 않을 수 있습니다.

rm(list=ls())명령은 모든 객체가 사용하는 메모리를 해제 할 것으로 예상되지만 실제로하는 일은 사용 된 메모리 청크에 대한 포인터를 파괴하는 것입니다. 문제는 이러한 메모리 청크가 새 작업에서 사용할 수 있도록 즉시 해제되지 않는다는 것입니다.

gc함수를 사용하여 R의 메모리 지우기

가비지 수집 프로세스는 R 내에서 자동으로 주기적으로 실행되지만 일부 빅 데이터 작업을 위해 많은 메모리가 필요한 정확한 순간에 실행되지 않는 경우가 있습니다. 이러한 상황에서는gc()함수를 호출하여 R의 메모리를 지우는 것이 유용 할 수 있습니다.

gc()의 주요 목적은 메모리 사용량에 대한 보고서를 표시하는 것입니다. 부작용으로gc()를 호출하면 가비지 수집 프로세스가 트리거되어 메모리가 지워집니다. 따라서 gc 문서에서 언급했듯이 큰 객체가 제거 된 후gc()를 호출하는 것이 좋습니다.이 작업은 R이 더 이상 사용하지 않는 메모리를 해제하도록 프롬프트하기 때문입니다.

루프 내에gc()호출을 삽입하여 가비지 수집 프로세스를 반복적으로 실행할 수도 있습니다. 이 프로세스는 호출 당 100ms 정도의 시간이 소요되므로 반복이 많은 루프 또는 반복 횟수가 많은 루프 내에 배치하지 않는 것이 좋습니다.

Windows를 사용하는 경우max=T 매개 변수와 함께memory.size()함수를 호출하여 운영 체제에서 액세스 할 수있는 메모리 양을 표시하거나max=F를 사용하여 현재 사용 중인 메모리 양을 표시할 수 있습니다. R 문서memory.size()함수의 다른 측면을 설명합니다.

빅 데이터 개체를 만들고 삭제할 때 메모리 소비가 어떻게 달라지는 지 보여주기 위해 Windows에서 100,000 개의 요소가있는 샘플 벡터를 만들고 벡터를 제거하고 마지막으로 가비지 수집을 수행하는 다음 코드를 실행할 수 있습니다. 각 명령어 사이에max=F 매개 변수로memory.size 함수를 실행하여 사용 된 메모리 양을 확인할 수 있습니다.

memory.size (max = F)

출력:

[1] 32.6

이 32.6MB는 R에서 사용하는 최소 메모리 양을 나타냅니다.

my_data <- sample (1:100000)
memory.size (max = F)

출력:

[1] 33.75

생성 된 샘플 데이터는memory.size 함수가보고하는 사용 메모리가 1만큼 증가했기 때문에 약 1MB의 메모리를 소비하는 것을 볼 수 있습니다.

rm (my_data)
memory.size (max = F)

출력:

[1] 33.75

물건을 떼어 냈음에도 불구하고 기억이 남아있는 것 같습니다.

gc()

출력:

         used (Mb) gc trigger  (Mb)  max used  (Mb)
Ncells 315785 16.9     617200  33.0    617200  33.0
Vcells 633077  4.9   25730861 196.4 110503932 843.1
memory.size (max = F)

출력:

[1] 32.6

메모리 양은 컴퓨터마다 다르지만,memory.size가보고하는 여유 메모리 양은rm (my_data)명령을 실행 한 후에도 동일하게 유지되며 초기 값으로 만 돌아갑니다. gc()명령이 실행되고 메모리가 효과적으로 해제 된 후 32.6MB가됩니다.

관련 문장 - R Memory