Show 아이포니앙아이폰, 아이패드, 터치 소모임입니다. 질문 아이폰 메모리 사용량 실시간 모니터링이 가능한 앱이 있을까요? 1데이엔드 6,317 2016-11-30 15:28:15 211.♡.125.42
안드로이드를 주로 사용하다보니, 잘 몰랐네요. 앱을 테스팅 중인데 아이폰에는 메모리 사용량 을 실시간으로 확인할 수 있는 어플이나 방법이 어떤게 있을까요? 데이엔드 님의 게시글 댓글 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 에서 위젯으로 지원합니다. 목록으로 글쓰기
앱이 메모리를 너무 많이 사용하면 어떻게 될까요? 갑자기 궁금해져서 찾아보다가 Reducing Your App's Memory Use 문서를 읽은 내용을 정리해보려고 합니다 :) 아이폰 디바이스에서 메모리는 매우 제한적입니다. 궁금해서 디바이스 별로 RAM 크기를 찾아봤는데 찾아봤는데 이정도 되는 것 같아요. (오피셜은 아닙니다...) https://itigic.com/how-much-ram-does-an-iphone-have-specifications/메모리는 한정된 자원이고, 가뜩이나 넉넉하지 않은데 여러 앱, 프로세스, 커널 등이 함께 써야하는 자원이기 때문에 잘 관리해줘야 합니다. 따라서 하나의 앱이 너무 욕심부리면 아이폰은 적당히 하라고 먼저 경고를 보내줍니다. 계속 사용해서 결국 메모리 제한을 넘어버리면 아이폰은 앱을 종료시켜버립니다. 앱을 사용하고 있었다면 사용자는 잘 쓰다가 갑자기 앱이 꺼지는 경험을 하게 됩니다. 어 뭐지? 하고 앱을 다시 켜면 아예 종료된거기 때문에 앱이 처음부터 다시 실행됩니다. 정확한 건 원문을 확인해주시고 대강 이렇게 쓰여있습니다 : ) 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 를 눌러서 바로 켜실 수도 있습니다 :) 그럼 Organizer에서 메모리 사용량을 볼 수 있습니다. 이렇게 보시는 것처럼 메모리 사용량은 2가지 영역으로 관리됩니다. 메모리 사용량은 사용 중인 memory page가 얼마나 사용됐는지를 의미합니다. page는 보통 16KB로 되어있어요. 즉, page 수 x page 크기(16KB) 가 메모리 사용량이 되는거죠. 따라서 메모리 사용량은 KB까지 정확한 크기가 아니라 page size(16KB) 단위로 커집니다. 만약 33KB를 썼다면 메모리 사용량은 48KB가 되는거죠. 그럼 정확히 어떤 아이들이 메모리를 쓰고 있는 걸까요? 앱의 실행가능하거나 연결된 라이브러리들과 프레임워크들은 바로 메모리를 쓰고 있다고 판단되구요, 단순히 할당 된 애들은 아직 clean한 상태라 메모리를 사용하고 있다고는 보지 않습니다. 어떤 값을 할당해서 dirty한 상태가 되면 그때 메모리를 사용했다고 판단합니다. 문서엔 대강 이렇게 쓰여져 있습니다. Understand Memory-Use MetricsXcode Organizer 와 MetricKit 은 각각 메모리 사용에 대한 2개의 metrics를 제공합니다. 첫 번째 metric는 최대 메모리 사용량입니다. 이는 수집된 샘플 중에서 가장 높은 메모리 사용량입니다. iOS는 앱의 메모리 사용량을 주기적으로 샘플링해서 이 metric을 수집합니다. 두 번째 metric은 일시중시(on suspension) 상황에서 관찰된 메모리 사용량으로 앱이 백 그라운드로 들어갈 때 측정됩니다. iOS는 사용 중인 메모리 페이지 수에 페이지 크기(일반적으로 16KB)를 곱한 메모리 사용량을 측정합니다. 할당된 메모리에 단일 byte를 쓰는데 이 byte를 저장하기 위해 새 페이지를 할당해야 한다면 메모리 사용량이 16KB 증가할 수 있습니다. (그러니까 커질 때는 16KB단위로 커진다는 의미 같네요.) 앱의 실행 파일 또는 연결된 라이브러리 및 프레임워크에 정의된 Data Structures는 memory-use metric에 기여합니다. 런타임에 앱에서 할당하는 메모리는 처음에는 이 metric에 영향을 주지 않습니다. "clean" 한 메모리들은 저장하기 위해 물리적 RAM을 바칠(dedicate) 필요가 없습니다. "dirty" 하게 되면 아래 그림처럼 이 content를 저장하기 위해 RAM을 바쳐야 합니다. Dirty memory는 memory-use metric에 기여합니다. View Data on Memory UseXcode Organizer window의 Memory pane이나 MetricKit을 사용해서 앱의 메모리 사용량을 확인합니다. 이 메모리 팬은 위 그래프에서 peak memory에 대한 정보를 보여주고 밑에 suspension 시의 메모리를 보여줍니다. 오른쪽 상단 모서리의 두 메뉴를 사용해서 디바이스 타입 별, 사용된 메모리 별로 정보를 필터링할 수 있습니다. 그래프를 클릭해서 먼저 클릭했던 그래프와 비교해볼 수 있습니다. 참고Reducing Your App's Memory Use |