Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- UITextView
- swift documentation
- swiftUI
- tableView
- Human interface guide
- Observable
- Protocol
- Clean Code
- 클린 코드
- uitableview
- HIG
- 리팩토링
- rxswift
- ios
- map
- RxCocoa
- ribs
- combine
- 애니메이션
- UICollectionView
- Refactoring
- SWIFT
- clean architecture
- 스위프트
- MVVM
- 리펙터링
- uiscrollview
- 리펙토링
- Xcode
- collectionview
Archives
- Today
- Total
김종권의 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
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 트랙으로 나누어서 보여줌 (아래에서 계속)
- (compressed memory 개념은 이전 포스팅 글 참고)
- 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: 여러 프로세스가 동일한 메모리 페이지를 공유할 때, 하나의 프로세스에서 해당 페이지를 수정하면 그 페이지를 다른 프로세스와 별도의 복사본으로 만드는 작업을 의미
- 의미) 메모리 공유를 통해 성능을 향상시키며, 동시에 메모리의 효율성을 유지
- Page Cache Hit: 요청된 페이지가 캐시에 이미 존재하여 디스크에서 읽지 않아도 되는 횟수를 의미
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments