Notice
Recent Posts
Recent Comments
Link
관리 메뉴

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

[iOS - swift] 4. Memory Deep Dive - Memory Footprint 프로파일링 방법 (1) (Allocation, Leaks, VM Tracker, Virtual memory trace) 본문

iOS 응용 (swift)

[iOS - swift] 4. Memory Deep Dive - Memory Footprint 프로파일링 방법 (1) (Allocation, Leaks, VM Tracker, Virtual memory trace)

jake-kim 2023. 12. 11. 01:06

* 가장 기초) iOS 메모리 기초 개념 - virtual memory, dirty memory, clean memory, compressed memory, swapped memory 이해하기 포스팅 글

 

1. Memory Deep Dive - iOS 메모리 운영체제 기초 (가상 메모리, 페이징, clean memory, dirty memory, compressed memory)

2. Memory Deep Dive - Memory를 줄여야 하는 이유 (+ 앱 메모리 사용량 아는 방법)

3. Memory Deep Dive - Memory Footprint (페이징, Compressed 메모리)

4. Memory Deep Dive - Memory Footprint 프로파일링 방법 (1) (Allocation, Leaks, VM Tracker, Virtual memory trace)

5. Memory Deep Dive - Memory Footprint 프로파일링 방법 (2) (Xcode Memory Debugger, Memory Graph, Memgraph)

6. Memory Deep Dive - Memory Footprint 프로파일링 방법 (3) (vmmap, leaks, heap, malloc_history)

7. Memory Deep Dive - 이미지 로드 매커니즘, 이미지 핸들링 최적화 (UIGraphicsBeginImageContextWithOptions, UIGraphicsImageRenderer)

8. Memory Deep Dive - 이미지 리사이징, 이미지 다운 샘플링 (ImageIO, ImageSource)

9. Memory Deep Dive - 백그라운드에서 메모리 최적화하는 방법

메모리 프로파일링 툴 - Xcode memory guage

  • 앱 실행 > Xcode > 7번째 탭 (xcode 15기준)
    • 이 방법은 비추천: WWDC2018의 내용에 따르면 Xcode에서 앱을 실행하면 더 많은 메모리를 소비하여 정확한 측정이 어려

 메모리 프로파일링 툴 - Imstrument

  • Allocation: 앱에서 수행된 힙 할당을 프로파일링
  • Leaks: 시간이 지남에 따라 프로세스에서 메모리 누수를 확인
  • VM Tracker: dirty, swapped, resident 트랙으로 나누어서 보여줌 (아래에서 계속)
  • Virtual memory trace: 앱과 관련된 가상 메모리 시스템의 성능을 확인 (아래에서 계속)

VM Tracker을 이용한 메모리 프로파일링

  • Instrument 실행 (cmd + I 단축키로 실행)
    • Allocations 클릭

  • 아래화면 등장

  • 녹화 버튼을 눌러서 프로파일링 시작

  • 2가지 트랙이 존재
    • Allocations: 앱에서 수행된 힙 할당된 내용
    • VM Tracker: dirty, swapped, resident 트랙으로 나누어서 보여줌
  • memory size 3가지 개념
    • dirty size: 현재 메모리에 적재된 페이지 중에서 수정된 데이터의 크기
    • swapped size: 메모리에 적재된 페이지 중에서 스왑된(디스크로 이동된) 페이지의 크기
    • resident size: 현재 메모리에 상주하고 있는 페이지의 크기
  • 주로 VM Tracker는 앱의 dirty size를 파악하는데 사용

Virtual memory trace을 이용한 메모리 프로파일링

  • 위와 같은 메뉴 선택: instrument > Allocation > 아래 화면처럼 Instrument 창에서 + 버튼을 누른 후 Virtual Memory Trace 항목 선택

  • (만약 녹화 버튼을 눌렀을 아래처럼 Permission 에러가 발생하면 다른 Xcode 프로젝트로 생성한 후 다시 실행하거나 캐시를 날리면 에러 해결이 가능)

  • (정상 처리되면) 아래처럼 Virtual Memory Trace 결과 확인이 가능

  • 이곳에서 Profile 버튼을 눌러서 By Operation으로 변경

  • 3가지 유용한 정보 확인이 가능
    • Page Cache Hit:  요청된 페이지가 캐시에 이미 존재하여 디스크에서 읽지 않아도 되는 횟수를 의미
      • 의미) 수치가 높을 수록 좋음 (디스크 I/O가 줄어드는 것)
    • Zero Fill: 새로 할당된 페이지의 내용을 모두 0으로 채우는 작업을 의미 (= 초기화되지 않은 데이터를 0으로 채우는 것을 의미)
      • 의미) 수치가 낮을수록 좋음 (새로운 메모리를 할당하고 초기화하는데 필요한 비용을 의미)
    • Copy On Write: 여러 프로세스가 동일한 메모리 페이지를 공유할 때, 하나의 프로세스에서 해당 페이지를 수정하면 그 페이지를 다른 프로세스와 별도의 복사본으로 만드는 작업을 의미
      • 의미) 메모리 공유를 통해 성능을 향상시키며, 동시에 메모리의 효율성을 유지

 

* 참고

- https://developer.apple.com/videos/play/wwdc2018/416/

- https://stackoverflow.com/questions/28039524/instruments-stopped-working-on-iphone-apps/65785028#65785028

Comments