Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 최적화 - Instruments로 행 분석하는 방법 (Analyze hangs with Instruments) 본문

최적화하기

[iOS - swift] 최적화 - Instruments로 행 분석하는 방법 (Analyze hangs with Instruments)

jake-kim 2025. 10. 15. 01:10

행이란?

  • 사용자가 앱을 쓸 때 지연된다고 느껴지는 것
    • 예) 사용자가 버튼을 누른 경우, 조금 있다가 반응한다는 느낌을 주는 것
  • 애플에서 제공하는 가이드)

https://developer.apple.com/videos/play/wwdc2023/10248/

  • 의미
Instant 즉각적인 반응이 바로 느껴질 정도로 빠름 (~100ms 이내)
Circumstantial 상황에 따라 달라지는, 약간 느리지만 용인됨 약간의 지연(~250ms)은 사용자가 느끼지만 불편하지 않음
Microhang 미세한 멈춤 눈에 띄는 짧은 멈춤 (~500ms 미만)
Hang 완전한 멈춤(먹통) 반응이 끊기거나 멈춘 듯한 상태 (~500ms 이상)
  • 즉, 즉각적이려면 100ms 이내로 동작하게끔해야함
  • 행의 기준은 500ms 이상 걸리는 동작을 의미함

행 파악하는 방법

  • 위에서 알아본대로 500ms 이상 걸리는 작업을 행이라고 정의
  • 이 행은 Instruments의 Time Profiler에서 확인이 가능
    • Time Profiler 관련 기초 내용은 이전 포스팅 글 참고

(Instruemtns > Time Profiler 중 Hangs 부분)

https://developer.apple.com/videos/play/wwdc2023/10248/

  • 여기서 보여지는 Severe Hang은 3.44초가 걸렸는데 단순히 오래걸린다는 의미에는 Too long 말고도 Too often도 존재

Main Thread가 바쁜 경우

  • 3.44초가 걸린 행을 분석할때는 세 가지 관점으로 먼저 생각 필요
    • 오래 걸림 (Too long)
    • 자주 불림 (Too often)
    • 메인스레드가 blocked 됨
  • 이것을 어떻게 구분할 것인가?
    • 우선 메인 스레드가 block된지 유무는 쉽게 파악이 가능
    • hangs 부분의 하위의 Main Thread의 그래프를 보면 hang 시점에 그래프가 들쑥날쑥 보이는 것과 아예 그래프가 없는 것으로 확인이 가능

  • 오래 걸림 vs 자주 불림 구분 방법
  오래 걸림 (Too long) 자주 불림 (Too often)
Flame Graph 가로로 긴 막대, 길게 이어짐 짧은 막대가 반복적으로 여러 곳에 흩어짐
Call Tree Calls 적음, Self Time 높음 Calls 많음, Avg Time 낮음
Timeline 굵은 덩어리 하나로 CPU 점유 얇은 점들이 계속 반복, 일정한 패턴
  • 코드 확인하는 방법: Time Profiler의 CPU Usage와 동일 (이전 포스팅 글 참고)

* 참고

- https://green1229.tistory.com/509

- https://developer.apple.com/videos/play/wwdc2023/10248/

Comments