본문 바로가기
무모한 도전-주식 인공지능 만들기

메모리 누수 현황을 파악하기 위한 작업

by 인터넷떠돌이 2019. 6. 29.
반응형

안녕하세요?

 

일단 6월 27일 목요일의 모의투자가 메모리 문제를 잡는다고 아무런 성과도 없이 끝났지만, 그래도 일단 계속해서 시도를 하기는 해야 하기 때문에, 일단 한번 계속해서 작업을 이어 나가도록 합니다. 이번에는 tracemalloc이라는 파이썬의 내장 모듈을 활용해서, 어디서 메모리를 계속 잡아먹는지, 정확히는 계속 커지는 지를 테스트 해 보려고 합니다.

 

가장 먼저 해야 할 일은 위 스크린샷처럼 일단 import시키는 과정이 먼저 있습니다. 가장 윗줄에서 한번 import해 오도록 시도를 해 봅니다.

 

그리고 나서 위 스크린샷처럼 첫 메소드가 시작하기도 전에 한번 tracemalloc을 start() 시키도록 하는 것을 잊으면 안된다는 것 입니다.

 

다음으로는 위 스크린샷처럼 처음 시작하자 마자 point1이라고 포인트를 찍어 주도록 합니다. 이렇게 함으로써, 가장 먼저 실행이 되는 장소에 한번 위 스크린샷처럼 포인트를 박을 수 있는 것 입니다.

 

다음으로는 위 스크린샷처럼 두번째 포인트를 박아 주도록 합니다. 이 방법으로는 위 스크린샷처럼 Qprocess가 시작하기 바로 위 스크린샷에서 지정을 해 주도록 합니다.

 

 

다음으로는 Qprocess가 실행이 되고 나서 위 스크린샷처럼 3번재 포인트가 작성이 되도록 만들어 주도록 합니다.  그리고 나서 다음 포인트를 박아 주러 갑니다.

 

다음 포인트는 바로 첫번째 메소드가 끝나고 두번째 메소드가 nedmalloc을 호출한 다음에 일어 나도록 합니다. 이 메소드에서 위 스크린샷에서 보면 알 수 있듯이, 일단 상위 10개의 메모리 소모량이 많은 것을 가지고 오도록 합니다.

 

그런데 막상 ㅅ ㅣㄹ행을 해 보니까, 에러가 뜹니다. 이게 이유가 바로 point1이 어디에 있는지 인식을 못해서 생기는 문제인데, 이 때문에 point1의 위치를 바꾸어 줄 필요가 있어 보입니다.

 

그래서 여기서에는 def __init__ 메서드가 없기 때문에, 하는 수 없이 첫 메소드가 시작되기 바로 직전에 이 변수를 설정해 주도록 합니다.

 

 

이렇게 해서 에러가 해결이 된 것으로 생각을 했지만, 이번에는 바로 txt파일에 적을 수 없는 현상이 발생했습니다. 그래서 str명령어를 먼저 사용해 보도록 했습니다.

 

그래서 결과를 txt파일에 저장하기 위해서 writelines를 사용하는데, 그 때 str()메서드를 이용해서 한번 문자열로 바꾸어 주도록 합니다.

 

그런데 1시간 정도 작업을 하고 나서 위 스크린샷을 보니까, 한번 알아보기 힘들 정도로 정리가 엉망인 것을 확인할 수 있었습니다.

 

그래서 이번에는 이런 식으로 \n을 사용해서 공백을 주어서 한번의 기록마다 다른 결과가 나오도록 만들어 주도록 합니다.

 

그리고 나서 다음으로 결과가 나오는 것을 볼 수 있었습니다. 그런데 이것 마저도 상위 10개의 결과가 어디가 끝이고 어디가 시작인지 알아보기 힘들었습니다.

 

그래서 이번에는 위 스크린샷처럼 for문에서 상위 10개만 뽑아서 작업을 할 때, 한줄 마다 끝에다가 end를 붙이고 줄띄움을 주도록 합니다. 그리고 나서 다시 1시간을 돌려 보도록 합니다.

 

그리고 하는 김에 시간 뒤에 this is end 라고 붙은 것도 보기가 영 좋지 않기 때문에, 하는 수 없이 그냥 \n을 붙여서 한줄 바꿈을 주도록 합니다.

 

이렇게 해 주는 것으로 이제 서야 제대로 읽을 수 있는 문서의 내용이 완성이 되었다는 생각이 듭니다. 그런데 이대로는 알아보기 힘이 많이 듭니다.  아무튼 이제 tracemalloc을 사용해서 어디가 메모리 누수가 있는지 알아보는 과정의 첫 단추를 끼우는데 성공하기는 했는데, 문제는 이걸 분석해야 하는 일이 남아 있습니다.

반응형