관리 메뉴

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

[iOS - swift] 2. 메모리 프로파일링 - VM Tracker을 사용하여 메모리 프로파일링하기 (resident size, dirty size, swapped size, virtual size 본문

iOS 응용 (swift)

[iOS - swift] 2. 메모리 프로파일링 - VM Tracker을 사용하여 메모리 프로파일링하기 (resident size, dirty size, swapped size, virtual size

jake-kim 2023. 12. 31. 01:47

1. 메모리 프로파일링 - VM Tracker 사용 방법 (#Instrument)

2. 메모리 프로파일링 - VM Tracker을 사용하여 메모리 프로파일링하기 (resident size, dirty size, swapped size, virtual size)

VM Tracker에서 메모리 살펴보기

VM Tracker 화면

  • resident, dirty, swapped, virutal을 확인하여 메모리 상태 확인이 가능
    • resident size: 실제로 RAM에 올라와서 현재 사용되고 있는 데이터의 크기
    • dirty size: RAM에 올라온 것 중에 데이터의 변경이 일어나서, page out될 수 없는 페이지의 크기
    • swapped: RAM <-> disk 페이지 변경된 크기

(자세한 residen size, dirty size, swapped size, virtual size에 관한 내용은 이전 포스팅, iOS 메모리 기초 개념 글 참고)

분석 방향

  • 보통 이미지 관련 이슈이므로 이미지 관련 코드를 메모리를 보고 역추적하기 (역추적은 이전 포스팅 글 참고)
  • dirty size가 핵심이기 때문에 이에 관해 파악하고 해결하는게 필요
    • resident size가 큰 경우 -> 현재 메모리 최적화가 안되고 있다는 정도로만 파악
    • dirty size가 큰 경우 -> 데이터를 다룰 때 불필요한 수정을 최소로하도록 수정하거나 대용량 데이터를 다룰 땐 캐싱을 사용하도록 수정이 필요
    • swapped가 큰 경우 -> 현재 RAM에 데이터가 없을 때 disk와 페이징을 swap하는 것이므로 이 값이 커지게 되면 메모리 최적화가 더욱 필요하다고 판단

ex) VM Tracker화면에서 Dirty 부분이 78%로 큰 퍼센트를 차지하고 있는데 이 중에서도 MALLOC_SMALL와 MALLOC_LARGE가 크다는 것을 확인 가능

  • MALLOC_SMALL가 큰 경우?
    • 작은 크기의 메모리 할당이 많이 이루어지고 있다는 것
    • 작은 크기의 객체를 할당할 때마다 메모리를 따로 할당하는 것이 아니라, 메모리 풀을 사용하여 여러 객체를 한 번에 할당하고 재활용하는 방향 (NSCache사용)
  • MALLOC_LARGE가 큰 경우?
    • 대규모 객체 또는 큰 메모리 블록이 할당되고 있다는 것
    • 배열보단 Linked List 자료구조로 변경할 것
Comments