아이폰 메모리 확인 - aipon memoli hwag-in

아이포니앙

아이폰, 아이패드, 터치 소모임입니다.

질문 아이폰 메모리 사용량 실시간 모니터링이 가능한 앱이 있을까요? 1

데이엔드

6,317

2016-11-30 15:28:15 211.♡.125.42

안드로이드를 주로 사용하다보니, 잘 몰랐네요.
그동안 애플 하드웨어는 별 걱정 없이 사용했는데
최근 들어 앱 사용시 팅기거나 죽는 다는 얘기를 많이봐서...

앱을 테스팅 중인데 아이폰에는 메모리 사용량 을 실시간으로 확인할 수 있는 어플이나 방법이 어떤게 있을까요?
보유 iOS는 ios8, ios9, ios10 다 있습니다.

데이엔드 님의 게시글 댓글

SIGNATURE

개인 리뷰용 블로그를 운영하고 있습니다.

서명 더 보기 서명 가리기

0

댓글 • [1]

을 클릭하면 간단한 회원메모를 할 수 있습니다. 메모동기화

매쑤

1 2 3 4 5

LINK

#66502906

IP 1.♡.191.26

16-11-30 2016-11-30 15:30:58 / 수정일: 2017-04-30 22:16:51

·

MAGIC LAUNCHER 에서 위젯으로 지원합니다.
그런데, 개발중이시면 Xcode에서 실시간으로 확인하실수 있습니다.

목록으로

글쓰기

개인적으로 공부하며 정리하는 블로그 입니다.
오류나 부족한 부분이 있을 수 있으니 감안하여 봐주시고 아낌없는 조언 감사드립니다 :D

앱이 메모리를 너무 많이 사용하면 어떻게 될까요? 갑자기 궁금해져서 찾아보다가 Reducing Your App's Memory Use 문서를 읽은 내용을 정리해보려고 합니다 :)

아이폰 디바이스에서 메모리는 매우 제한적입니다. 궁금해서 디바이스 별로 RAM 크기를 찾아봤는데 찾아봤는데 이정도 되는 것 같아요. (오피셜은 아닙니다...)

아이폰 메모리 확인 - aipon memoli hwag-in
https://itigic.com/how-much-ram-does-an-iphone-have-specifications/

메모리는 한정된 자원이고, 가뜩이나 넉넉하지 않은데 여러 앱, 프로세스, 커널 등이 함께 써야하는 자원이기 때문에 잘 관리해줘야 합니다.

따라서 하나의 앱이 너무 욕심부리면 아이폰은 적당히 하라고 먼저 경고를 보내줍니다. 
EXC_RESOURCE exception type and MEMORY subtype 등이 있는 리포트인데 앱이 메모리 사용량의 한계까지 왔다는 의미입니다. 아직 앱이 종료되거나 하지는 않지만 곧 종료될 수 있는 위험 신호인거죠!

계속 사용해서 결국 메모리 제한을 넘어버리면 아이폰은 앱을 종료시켜버립니다. 앱을 사용하고 있었다면 사용자는 잘 쓰다가 갑자기 앱이 꺼지는 경험을 하게 됩니다. 어 뭐지? 하고 앱을 다시 켜면 아예 종료된거기 때문에 앱이 처음부터 다시 실행됩니다.

정확한 건 원문을 확인해주시고 대강 이렇게 쓰여있습니다 : )


Overview

디바이스에서 메모리(RAM)는 프로세스, 커널 등에서 공유되는 매우 제한적인 자원입니다. iOS는 메모리에 대한 다양한 요구 사항을 만족시키기 위한 기술들을 가지고 있지만 이 기술들은 속도와 응답성을 사용합니다. 예를 들어, iOS는 백 그라운드에서 동작하는 앱이 메모리를 많이 사용한다면 solid-state storage로 보낼 수 있습니다. 그렇게 되면 앱이 백그라운드 작업을 다시 실행시키거나 포 그라운드로 돌아오려고 할 때 딜레이가 발생합니다.

만약 앱이 메모리를 너무 많이 사용한다면 iOS는 경고를 보냅니다. crash report 형태의 notifications를 받을 수 있습니다. 이 리포트는 EXC_RESOURCE exception type 과 MEMORY subtype 등을 포함하는데 앱 메모리가 거의 한계에 이르렀다는 걸 알려줍니다. 이는 메모리 사용 문제를 발견했다는 의미지 앱이 종료(terminated) 되었다는 걸 의미하지는 않습니다. 메모리 제한은 디바이스에 따라 다르며 앱이 이 제한을 초과하면 iOS가 앱을 종료시킵니다. 만약 포 그라운드에서 앱이 종료된다면 사용자는 앱이 갑자기 꺼지는 걸 보게됩니다. 그리고 사용자가 다시 앱을 실행시키려고 하면 앱은 백 그라운드에서 실행되는 게 아니라 처음부터 실행됩니다.


그렇다면 앱이 메모리를 얼마나 쓰고 있는지는 어떻게 확인할까요?

Xcode Organizer라는 녀석을 이용할 수 있습니다. MetricKit 이라는 걸 사용하는 모양이에요. (The Xcode Organizer and MetricKit each provide two metrics about memory use in an app.) Xcode Organizer는 아래 그림처럼 

Window - Organizer로 켜시거나 옵션 + 쉬프트 + 커멘드 + O 눌러서 바로 켜실 수도 있습니다 :)

아이폰 메모리 확인 - aipon memoli hwag-in

그럼 Organizer에서 메모리 사용량을 볼 수 있습니다.

이렇게 보시는 것처럼 메모리 사용량은 2가지 영역으로 관리됩니다.
첫 번째는 Peak memory, 최고 메모리 사용량인데요, iOS가 주기적으로 샘플링 해서 수집하는데 그 중에 가장 큰 메모리를 보여줍니다. 
두 번째는 Memory at Suspension, 앱이 일시정지 했을 때의 메모리를 보여줘요. 백그라운드로 갔을 때 기록합니다.

아이폰 메모리 확인 - aipon memoli hwag-in

메모리 사용량은 사용 중인 memory page가 얼마나 사용됐는지를 의미합니다. page는 보통 16KB로 되어있어요. 즉, page 수 x page 크기(16KB) 메모리 사용량이 되는거죠. 따라서 메모리 사용량은 KB까지 정확한 크기가 아니라 page size(16KB) 단위로 커집니다. 만약 33KB를 썼다면 메모리 사용량은 48KB가 되는거죠. 

아이폰 메모리 확인 - aipon memoli hwag-in

그럼 정확히 어떤 아이들이 메모리를 쓰고 있는 걸까요? 

앱의 실행가능하거나 연결된 라이브러리들과 프레임워크들은 바로 메모리를 쓰고 있다고 판단되구요, 단순히 할당 된 애들은 아직 clean한 상태라 메모리를 사용하고 있다고는 보지 않습니다. 어떤 값을 할당해서 dirty한 상태가 되면 그때 메모리를 사용했다고 판단합니다.

아이폰 메모리 확인 - aipon memoli hwag-in

문서엔 대강 이렇게 쓰여져 있습니다.


Understand Memory-Use Metrics

Xcode Organizer 와 MetricKit 은 각각 메모리 사용에 대한 2개의 metrics를 제공합니다. 첫 번째 metric는 최대 메모리 사용량입니다. 이는 수집된 샘플 중에서 가장 높은 메모리 사용량입니다. iOS는 앱의 메모리 사용량을 주기적으로 샘플링해서 이 metric을 수집합니다. 두 번째 metric은 일시중시(on suspension) 상황에서 관찰된 메모리 사용량으로 앱이 백 그라운드로 들어갈 때 측정됩니다.

iOS는 사용 중인 메모리 페이지 수에 페이지 크기(일반적으로 16KB)를 곱한 메모리 사용량을 측정합니다. 할당된 메모리에 단일 byte를 쓰는데 이 byte를 저장하기 위해 새 페이지를 할당해야 한다면 메모리 사용량이 16KB 증가할 수 있습니다. (그러니까 커질 때는 16KB단위로 커진다는 의미 같네요.)

아이폰 메모리 확인 - aipon memoli hwag-in

앱의 실행 파일 또는 연결된 라이브러리 및 프레임워크에 정의된 Data Structures는 memory-use metric에 기여합니다. 런타임에 앱에서 할당하는 메모리는 처음에는 이 metric에 영향을 주지 않습니다. "clean" 한 메모리들은 저장하기 위해 물리적 RAM을 바칠(dedicate) 필요가 없습니다. "dirty" 하게 되면 아래 그림처럼 이 content를 저장하기 위해 RAM을 바쳐야 합니다. Dirty memory는 memory-use metric에 기여합니다.

아이폰 메모리 확인 - aipon memoli hwag-in

View Data on Memory Use

Xcode Organizer window의 Memory pane이나 MetricKit을 사용해서 앱의 메모리 사용량을 확인합니다.

아이폰 메모리 확인 - aipon memoli hwag-in

이 메모리 팬은 위 그래프에서 peak memory에 대한 정보를 보여주고 밑에 suspension 시의 메모리를 보여줍니다. 오른쪽 상단 모서리의 두 메뉴를 사용해서 디바이스 타입 별, 사용된 메모리 별로 정보를 필터링할 수 있습니다. 그래프를 클릭해서 먼저 클릭했던 그래프와 비교해볼 수 있습니다.

참고

Reducing Your App's Memory Use