XCode에서 Allocations, Time Profiler로 메모리 Profiling하기

서론

  • XCode의 Profiling은 여러 가지가 있다.
  • 앱의 성능 및 메모리 사용을 분석하여 최적화하는 프로세스
  • Memory Leaks 및 Allocations을 확인하는 대표적인 Memory Profiler, Time Profiler에 대해서 소개

  • XCode 상단의 Product → Profile을 통해 Profiling 가능
  • Profile을 클릭하면 알아서 Build를 진행

 

Memory Profiler

  • 메모리가 얼마나 할당 되어 있는지 확인 가능
  • 메모리가 과다하게 할당 되어 있는지 확인 가능
  • 메모리 누수 확인 가능

  • Allocations를 클릭
  • Leaks를 클릭해도 크게 상관은 없지만, Leaks는 메모리 누수가 일어나지 않으면 보여지지가 않음

  • Allocations도 시간에 따라서 Heap 메모리를 시각적으로 보여준다.
  • 주로 주목할 것은 제일 상단에 있는 All Heap Allocations의 Total Bytes

  • Call Trees로 가면 어떤 함수에서 Heap Allocations가 많이 부과되는지 알 수 있다.

  • Bytes Used를 통해 상대적으로 메모리르 많이 잡아먹는 코드를 확인

  • 해당 메서드를 더블클릭하면 실제 원인이 되는 코드 주소가 나온다.
  • 이 코드를 수정하거나 시간 복잡도를 줄이면 해결

 

Time Profiler

  • 앱을 사용하다보면, 갑작스럽게 느려지는 경우가 나타날 수 있음
  • 시간 단위로 앱의 수행 시간을 확인 할 수 있음
  • 함수 단위, 호출 경로로도 수행시간 확인 가능
  • 병목이 발생하는 부분을 찾아서 디버그하기 매우 용이

  • Time Profiler를 찾아서 클릭

  • 빨간 녹화 버튼을 클릭하면 앱이 실행되면서 Time Profiler에 CPU 사용량이 기록됨
  • 현재까지 기록된 시간 또는 내가 지정한 시간에서 가장 무겁게 실행된 함수 및 스레드를 알 수 있음

  • 약 20초까지의 Time Profiling을 마친 후의 모습
  • 메인스레드에서 약 94.6%의 Weight를 가지고 있음

  • 메인 스레드에서 함수 단위에서 가장 많은 Weight를 가지는 함수는 메인스레드의 비율에서 1.7%정도
  • 이 경우에는 많은 CPU 소모량이 나오지는 않았지만, 만약 비정상적으로 나온다면 해당 함수의 시간 복잡도를 감소시키면 됨

  • 해당 줄을 클릭하면 실제 코드로 들어가서 보여준다.
  • 더 직관적인 해석이 가능