iOS Memory Deep Dive Part 3

Tabber·2023년 9월 10일
0

iOS Memory Deep Dive

목록 보기
3/3
post-thumbnail

iOS 메모리에 대해 심층 분석을 해보자.

해당 글의 원본 내용은 WWDC18 - iOS Memory Deep Dive 입니다.

이번에 WWDC 18 세션 중 iOS Memory Deep Dive 세션을 보면서 공부한 내용들을 정리해보기 위해 이 글을 적었다.

이 글은 총 3개의 글로 이루어질 예정이다.

Part 1은 iOS 메모리 심층 분석에 초점을 맞추었고,
Part 2는 footprint를 프로파일링 하는 방법에 대해 소개,
Part 3는 알아본 내용으로 실제 메모리 관리, 프로파일링을 해보는 것으로

글을 마무리 짓겠다.


프로파일링

Part 2 에서 프로파일링 하던 방식대로 진행해보자.

위 사진은 실제 메모리 이슈가 생기는 부분을 캡쳐한 것이다.

사실 이 이슈 때문에 WWDC 18 세션을 찾아보았고, 공부하였다.

메모리 사용량만 보더라도 비정상적으로 오르는 것도 문제지만, 진짜 큰 문제는 저 올라간 메모리가 생기는 화면에서 나와도 유지가 된다라는 점이다.

어디서 문제가 생기는지 확인해보자.

Memgraphs

vmmap App.memgraph

앱의 이름은 플레이스 홀더로 대체한다.

다른 용량은 그렇다고 볼 수 있지만, DefaultMallocZone, WebKit Malloc 등등이 가상 공간의 사이즈가 큰 것으로 보이고, 나머지는 타협할만 하다

vmmap --summary App.memgraph

더 요약해서 보고 싶어서 커멘드를 바꿔봤다.

다른 곳과 다르게 유독 Dirty Size가 많이 쌓인 로그를 볼 수 있었다.

더 파헤쳐보자.

sudo vmmap -pages /Users/tabber/Desktop/App\[16138\].memgraph  | grep '.dylib' | awk '{ sum += $6 } END { print "Total Dirty Pages: " sum} '

Dirty Page를 카운트 해보기도 했는데, 사실 이건 측정하기 힘들다.

그럼 이제 Leaks 를 살펴보자.

Leaks

음,,Leaks를 살펴보니 문제가 확연히 보였다.

무려 619개의 메모리 릭이 발생하고 있었다. 619개,,

음,,그래도 어디서 정확히 문제가 발생하고 있는지 확인이 불가능해서 heap도 살펴봤다.

실제로 heap이 많이 할당된 순으로 출력을 해보았다.
NSConcreteData와 NSConcreteDataMutableData 가 탑을 달리는 모양새이다.
찾아보니 NSConcreteData는 NSData로 생각하면 된다고 한다.

그럼 힙에 NSData를 만들고 난 뒤 사라지지 않고 계속 적재하고 있다라는 뜻이다.

아무래도 추측하기론 이미지 데이터를 계속 적재하고 지우지 않는 것 같다.

그래도 어떤 메모리가 공간을 차지하고 있는지 확인할 수 있었다.

찾아놓은 데이터를 기반으로 메모리릭이 나는 지점을 정확하게 파악해봐야 할 것 같다.

정리

오늘은 메모리 프로파일링을 실제로 테스트 해보았다.
조금 더 살펴보고 추가로 글을 적어야 할 것 같지만, vmmap, leaks, heap 등을 사용해보며 실제 메모리에 어떻게 할당이 되어있는지 살펴볼 수 있는 기회가 됐다. 다음에는 실제 메모리릭을 잡는 글로 찾아뵙도록 하겠다.

profile
iOS 정복중인 Tabber 입니다.

0개의 댓글