본문 바로가기
개발

[안드로이드 코틀린] profier를 사용하여 메모리 리크를 해결해보자

by kks950115 2024. 3. 25.
728x90

정확히 어디에서 나오는지는 모르겠지만 메모리 리크를 계속 일으키는 오류가 있어서 그동안 이런 기능이 있다~ 정도로 알고 있던 profiler를 사용해보았다. 

 

사용법은 간단하다. 해결법이 어려울 뿐.....

 

먼저 앱을 실행한다

profiler 화면

 

왼쪽에 속도계기판 같은 아이콘을 클릭한다. 그러면 위와 같은 화면이 뜬다.

위 화면은 이미 연결한 것이고 처음 키면 아무것도 없는 빈칸일텐데

선택방법

+ 아이콘을 클릭하고 기기를 선택하고 앱을 선택하면 된다. 

profiler화면 에서 memory 즉 파란색 그래프를 클릭하면 아래 화면이 뜰 것이다.

이 상태에서 메모리 리크가 의심되는 부분을 반복해서 실행해보자. 중간중간에 위에 화면에 보이는 쓰레기통 아이콘을 클릭해주자. 강제로 가비지콜렉션을 실행시키는 버튼인데 관계없는 메모리가 잡히는 걸 방지해준다. 이 정도면 됐다 싶을 때면 capture heap dump를 클릭하고 record 버튼을 누른다.

 

대략 이런 화면이 뜰텐데 중요한 건 위에 파란색으로 써있는 2 leaks 라고 써져있는 부분이다. 메모리 리크나는 부분이 2개가 아니라 메모리 리크가 일어난 반복횟수를 알려주는거다. 

즉 테스트 중 2번의 메모리 리크가 발생했다는 거다.  파란 글자를 클릭하면 아래 화면이 뜬다.

app heap을 클릭해서 발생한 클래스를 확인하고 클래스를 확인하면 아래에 인스턴스가 뜬다. 

인스턴스를 누르면 인스턴스 디테일에서 메모리 리크가 일어난 부분을 찾을 수 있다. 

Shallow Size는 객체가 사용하고 있는 크기를 나타낸다.  Retained Size는 해당 객체를 삭제하고 난 뒤에 얻을 수 있는 크기를 말한다. 즉shallow size에 비해 Retained Size가 비정상적으로 큰 오브젝트가 누수를 일으키는 원인이라 생각하면 편하다.

해당 화면을 보니 campDatalist와 markers에 문제가 있는 거 같다.

쭈욱 타고 내려가다보면 어디가 문제인지 어느정도 유추가 될 것이다.

 

문제의 원인을 발견하는데에 큰 도움이 됐다. 이걸 어떻게 해결하지는 감이 안잡히지만...

 

728x90
반응형

댓글