핀수로그
  • LeakCanary 사용하기
    2022년 08월 07일 00시 35분 06초에 업로드 된 글입니다.
    작성자: 핀수
    728x90
    반응형

    들어가며

    지난번의 메모리 누수 이슈로 원인을 찾아 헤매다 LeakCanary를 알게 되었다.

    안드로이드 스튜디오에서 제공하는 프로파일러에서도 memory leak 을 잡아 낼 수 있는데

    개인적으로 사용하기가 어려웠다. 

    그래서 따로 사용하는 법(?) 이해하는 법을 학습했지만

    문제를 해결하기 위한 원인을 찾아내는 데에는 한계가 있었다고 생각한다.

    그래서 LeakCanary를 사용해보고자 하였다.

    android studio profiler - MEMORY

     

    메모리 누수 memory leak

    A small leak will sink a great ship. 
    - Benjamin Franklin

    쉽게 얘기해서 우리는 먹으면 싸야한다.

    근데 그게 제때 배출이 안되고 안에서 자꾸 쌓인다고 생각하면 어떤가?

    탈이 난다.

     

    더이상 참조되지 않는 것들은 가비지 컬렉션에 의해 수거되어야하는데

    제대로 참조를 끊어주지 않으면 (메모리 해제가 제대로 이루어지지 않으면)

    계속 메모리를 차지할 것이고 정작 필요한 곳에서 메모리를 할당 받을 수 없어진다.

     

    이러한 현상을 메모리 누수라고 한다.

    메모리 누수로 사용할 메모리가 부족해지면 OOM (Out of Memory)이 발생하게 된다.

    (앱이 갑자기 죽거나, ANR이 뜨겠죠..? 아이고 사용자 다 날아가네..)

     

    써보자고

    종속성을 추가해준다.

    디버그 모드에서만 실행되어야하므로 아래와 같이 해준다.

        // LeakCanary
        debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'

       

      이제 모든 준비는 끝났다.

      너무 간단해서 좀 놀라웠다.

       

      D/LeakCanary: LeakCanary is running and ready to detect memory leaks.

      앱을 실행 했을 때 위와 같이 로그가 뜨면 된다.

       

      그리고 앱 서랍으로 가면 어플 하나가 설치 되어있는 것을 확인할 수 있다.

       

      앱을 실행하다가 메모리 누수가 발생하면 다음과 같은 안내가 뜬다.

      분석이 다돼면 로그캣에서 또는 위에 설치된 어플로도 확인할 수 있다.

      개인적으로는 앱으로 확인하는게 눈에 잘 들어왔다.

       

      앱으로 들어가보면 다음과 같이 항목 별로 나누어져있다.

       

      들어가보면 해당 메모리 누수에 대한 내용이 자세하게 나와있다.

      아래에서부터 읽는 것이 좋다.

      해당 내용은 로그캣에서도 똑같이 확인할 수 있다.

       

      All retained objects have been garbage collected

      만약 위와 같은 말이 뜬다면

      메모리 누수가 없는 것으로 볼 수 있다.


      References

      아래 글을 참고하여 작성 되었습니다.

      https://square.github.io/leakcanary/

      728x90
      반응형
      댓글