如何解释仪器中的Allocations和VM Tracker的结果?

时间:2010-10-26 13:58:17

标签: performance macos memory-leaks instruments

我正在跟踪一个非常严重的内存泄漏(或更可能是被遗弃的内存)情况。我做了以下事情:

1)开始我的申请
2)到达应用程序将显示泄漏的点 3)使用'分配'选择启动工具
4)附加到我的过程并开始记录
5)采取初始快照
6)用VM跟踪器拍摄初始快照
7)重现导致记忆升高的步骤 8)采取另一个快照
9)使用VM跟踪器拍摄另一个快照

如果我执行这些步骤,我会看到实际上没有意义的结果。我希望我遗漏一些有关这些工具如何工作的信息。例如,我知道'泄漏'工具不会跟踪所有类型的内存分配(例如碳应用程序)。我的应用程序是一个庞大的遗留应用程序,可能在我不熟悉的一些过时的子系统中有奇怪的分配代码。也就是说,这就是我所看到的:

  • 在VM跟踪器的初始快照中,当我查看摘要时,类型MALLOC_SMALL相当小,大约为72MB(虚拟大小)
  • 在第二个快照中,MALLOC_SMALL使用量已增长到224MB(再次为虚拟大小)
  • 在第二个快照中,它告诉我堆积增长是45MB

那么MALLOC_SMALL如何从72MB增长到224MB,但堆增长只有45MB?分配工具是否缺少VMTracker正在录制的内容?

进一步支持我在分配工具中遗漏了一些内容...如果我查看MALLOC_SMALL下列出的新区域(那些不在第一个快照中但位于第二个快照中的区域),那些地址应对应于页面分配并计入72MB-> 224MB的差异,对吗?那么,我记得该区域的地址范围(例如,0x79000000-0x7b000000),然后返回分配工具并按地址排序“所有对象”列表。然后我寻找该范围内的地址。但是,我只看到4个仅占4KB的分配?! VM跟踪器在该区域报告的其他32MB在哪里?

任何帮助都会受到赞赏....我希望这些工具是如何工作的,我只是不理解。

1 个答案:

答案 0 :(得分:3)

不是一个直接的答案 - 但Bill Bumgarner最近在博客中谈到了仪器和内存增长的一些用途:

http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/

那里有一些很好的信息......