728x90
Memory Leakage
- 프로그램이 불필요한 메모리를 점유하고 있는 것을 메모리 누수(memory leakage)[1]
- 메모리 누수를 발생시키는 요인 중 matplotlib 라이브러리를 사용할 때 메모리 누수가 발생하기 쉬움
- 각 iteration마다 이미지를 그리는데 필요한 메모리를 할당하고 이미지를 저장하는데 다음 iteration으로 넘어가도 해당 메모리를 점유하기 때문에 다음과 같은 경우에 메모리 누수가 발생
- 메모리 사용량 추적을 위해 다음 블로그의 코드를 사용했습니다.[2]
import matplotlib.pyplot as plt
import numpy as np
memory_ = np.zeros(100)
dummy_data = np.random.rand(100,100,100,3)
for i in range(100):
plt.imshow(dummy_data[i,:])
memory_use = _check_usage_of_cpu_and_memory()
memory_[i] = memory_use
- 메모리 사용량이 iteration이 진행됨에 따라 꾸준히 증가하는 것을 볼 수 있음
plt.clf()[3]
- figure 창 내의 plot을 지우는 방법
- 이미지를 저장한 후 plt.clf()를 붙여줌
plt.close('all')[3]
- figure 창 자체를 지우는 방법
- 이미지를 저장한 후 plt.close('all')을 붙여줌
- 둘 다 memory에서 figure를 해제하는 방법이지만 특정 상황에서 memory 해제가 안되는 문제가 있음[4]
- 마음 편하게 둘 다 붙여주면 matplotlib 사용으로 인한 메모리 누수 문제는 해결됨
memory_2 = np.zeros(100)
plt.close('all')
plt.clf()
dummy_data = np.random.rand(100,100,100,3)
for i in range(100):
plt.imshow(dummy_data[i,:])
memory_use = _check_usage_of_cpu_and_memory()
memory_2[i] = memory_use
- 메모리 사용량이 증가하지 않음
Reference
[1] wikipedia
[2] python에서 프로세스의 cpu 사용량과 memory 사용량 체크하기
[3] Matplotlib의 cla(), clf() 및 close() 메서드의 차이점
[4] Stack Overflow
'프로그래밍 언어 > python' 카테고리의 다른 글
_var, var_, _var_, __var__과 같이 선언된 변수의 의미를 설명 (0) | 2022.07.26 |
---|---|
unittest, Test-driven develope를 위한 라이브러리 (0) | 2022.07.26 |
pyforest, 42개의 라이브러리를 한 줄의 코드로 import (0) | 2022.07.26 |
보기 좋은 쉼표 배치 (0) | 2022.07.26 |
assert문으로 디버깅 (0) | 2022.07.26 |