2010-12-15 3 views
1

할당 도구를 사용하여 iOS 앱에서 힙 사용을 측정합니다. 상당한 양의 메모리가 태그 이름이 "Memory Tag 70"인 지역에 할당되어 있고, 누가 책임을 질 수 있는지 알고 싶습니다. 다음을 쫓아 갈 수 있습니다 :명명 된 OSMallocTag를 생성 한 라이브러리를 찾을 수 있습니까?

  • 이 메모리에 대해 무엇이든 시도하고 시도해보십시오.
  • 만약 그렇다면 무엇을해야합니까 (즉, 어떤 코드가 해당 영역에 객체를 할당하고 있는지).

따라서 특정 인수가있는 OSMalloc_tagAlloc()에 대한 호출이 어디서 발생했는지 추적 할 수 있습니까? 나는 시뮬레이터에서 실행될 때만 그렇게 할 수있을 것이라는 것을 기꺼이 받아 들일 것이다. 그러나 그것이 사실 일지라도, 나는 어떻게 그것에 대해 갈 것인가? 내게 dtrace -c을 통해 시뮬레이터에서 내 앱을 시작할 수 있다면 dtrace에 태그 이름을 표시 할 수 있습니까? 방법?

+1

흠 ... "메모리 태그 70"은 "Area 51"의 iOS와 동일 할 수 있습니다. –

+0

@GrahamLee : 죄송합니다. 그것은 내 실수였다. 게시물 http://stackoverflow.com/questions/10025724/nsfilemanager-cant-create-file. 그 일에 대해 미안합니다. 개인적이지 않은 일 :) –

답변

0

계측기에서는 창의 상단과 하단 사이의 구분선에있는 팝업을 선택하여 다양한 디스플레이 사이를 전환 할 수 있습니다. "Allocations"의 경우 "Call Trees"를 표시하도록 전환 할 수 있습니다 (기본적으로 "통계"라고 생각합니다).

모든 할당에 대해 호출 스택을 제공해야합니다. 그러나 커널에서 사용자 공간까지 모든 경로를 추적 할 지 확신 할 수 없습니다.

0

나를 위해,이 태그는 내가 할당했던 큰 UIImages와 관련이 있습니다. 나는 당신이 이것에 대해 더 많은 정보를 얻을 수있는 방법에 대한 조사를했고, 제안할만한 (아마도) 유용한 것들을 가지고있었습니다.

관심있는 태그는 OSMalloc_tagAlloc()이 아닌 vm_allocate 및 유사 플래그 인수를 통해 전달 된 태그라고 생각합니다. iOS 3.1 릴리스 노트는 VM 계측기와 관련하여 < mach/vm_statistics.h> 및 < mach/vm_map.h> 헤더를 언급합니다.

이 태그는 vm_statistics.h의 VM_FLAGS_ALIAS_MASK 및 #define에 따라 vm_allocate 플래그 매개 변수를 통해 전달됩니다. (이것들은 "별명"이라고합니다.) 이것은 vm_allocate를 검사하고 플래그 매개 변수에서 태그를 추출하는 dtrace 스크립트를 작성할 수 있어야한다는 것을 의미합니다. 예를 들어 :

sudo dtrace -n 'fbt:mach_kernel:vm_allocate:entry /pid==12345/ { printf("%d", (arg3 & 0xFF000000) >> 24); }'

당신은 "악기"메뉴에서 "... 새로운 악기를 구축"는 DTrace를 악기를 만들어를 통해 아이폰 OS 시뮬레이터에 대해 실행하는 악기를 사용하거나 명령을 사용하여 사용할 수 있습니다 -line dtrace 스크립트를 실행하고 실행중인 응용 프로그램에/pid == 123456/predicate를 포함시킵니다.

불행히도 이러한 할당을 찾기 위해 올바른 프로브를 찾는 데 실패했습니다. 적절한 argN 변수를 검사 할 때 플래그는 태그/alia 부분에 항상 0 인 것처럼 보입니다. 예를 들어 fbt : mach_kernel : vm_allocate, fbt : mach_kernel : mach_vm_allocate, fbt : mach_kernel : vm_map_enter 등을 시도해 보았습니다. 아마도 이러한 할당은 다른 방법을 통해 진행되고 있을까요? 나는 커널의 메모리 할당 시스템에 대해 많이 모른다.

그래서 이러한 태그가 커널에 전달되는 위치를 정확하게 알 수는 없지만이를 추적하는 데 도움이되기를 바랍니다.

관련 문제