matplotlib 사용시 메모리 누수

최준혁·2023년 2월 27일
0
post-thumbnail

matplotlib.pyplot.figure() 실행시 마다 작업이 종료되었다.
에러를 구글링해보니 메모리 누수문제라고 확신이 들었고 현재 프로세스 메모리 사용량이 궁금했다.

리눅스에서 top명령어로 알수도 있지만 디버깅하면서 어느라인에서 가장 많이 튀는지 보고싶었다.
코드는 아래와 같다.


def check_usage_of_cpu_and_memory():
    import os
	import psutil
    pid = os.getpid()
    py  = psutil.Process(pid)
    
    cpu_usage   = os.popen("ps aux | grep " + str(pid) + " | grep -v grep | awk '{print $3}'").read()
    cpu_usage   = cpu_usage.replace("\n","")
    
    memory_usage  = round(py.memory_info()[0] /2.**30, 2)
    
    print("cpu usage\t\t:", cpu_usage, "%")
    print("memory usage\t\t:", memory_usage, "%")

matplotlib 라이브러리를 사용하여 이미지를 그릴때 각 iteration마다 이미지를 그리는데 필요한 메모리를 할당하고 이미지를 저장하는데 다음 iteration으로 넘어가도 해당 메모리를 점유하기 때문에 메모리 누수가 발생하기 쉽다고 함

아래 두가지를 사용하여 누수를 잡았다.

  • plt.clf()
    - figure 창 내의 plot을 지우는 방법
    - 이미지를 저장한 후 plt.clf()를 붙여줌
  • plt.close('all')
    - figure 창 자체를 지우는 방법
    - 이미지를 저장한 후 plt.close('all')을 붙여줌
profile
HUGE FAN OF Freecodecamp, nomadcoder 까먹을까봐, 즐겨찾기에 넣어둔 블로그가 사라질까봐

0개의 댓글