2010-10-26 71 views
5

我正在跟蹤一個非常強硬的內存泄漏(或更可能是遺棄內存)的情況。我做到以下幾點:如何解釋儀器中的分配和VM跟蹤器的結果?

1)啓動我的應用程序
2)獲取到一個地步,應用程序將顯示泄漏
3)使用「分配」選擇
4)連接到我的過程開始儀器和開始記錄
5)採取的初始heapshot
6)採取與VM跟蹤
7)再現致使所述步驟的初始快照存儲器上升
8)採取另一種heapshot
9)採取與VM另一個快照跟蹤器

如果我執行這些步驟,我看到的結果沒有任何意義。我希望我錯過了關於這些工具如何工作的一些信息。例如,我知道「泄漏」工具不會跟蹤所有類型的內存分配(例如碳應用程序)。我的應用程序是一個巨大的遺留應用程序,它可能在我不熟悉的某些過時的子系統中出現奇怪的分配代碼。這就是說,這是我所看到的:

    在VM跟蹤器的初始快照,當我看着摘要
  • ,類型MALLOC_SMALL是相當小的,在大約72MB(虛擬大小)在第二個快照
  • , MALLOC_SMALL使用率已經增長到224MB(再次虛擬大小)在第二heapshot
  • ,它告訴我heapgrowth是45MB

那麼,怎樣才能從MALLOC_SMALL增長72MB 224MB的,但heapgrowth只有45MB? Allocations樂器是否缺少VMTracker正在錄製的內容?

進一步支持我錯過了Allocations工具中的某些內容...如果我查看MALLOC_SMALL下列出的新區域(那些不在第一個快照但在第二個快照中的),那些地址應該對應於分配的頁面佔72MB-> 224MB的差異,是正確的嗎?然後,我記住了該區域的地址範圍(例如,0x79000000-0x7b000000),然後返回到Allocations工具並按地址對「所有對象」列表進行排序。然後我查找該範圍內的地址。但是,我只看到4個分配,僅佔4KB?! VM跟蹤器在該地區報告的其他32MB在哪裏?

任何幫助,將不勝感激....我希望這是關於這些工具如何工作,我只是不理解的基本知識。

回答