【问题标题】:How to interpret results from Allocations and VM Tracker in Instruments?如何解释 Instruments 中 Allocations 和 VM Tracker 的结果?
【发布时间】:2011-04-30 18:41:29
【问题描述】:

我正在跟踪一个非常严重的内存泄漏(或更可能是废弃的内存)情况。我执行以下操作:

1) 启动我的应用程序
2) 达到应用程序将显示泄漏的程度
3) 使用“分配”选项启动工具
4) 附加到我的进程并开始录制
5) 获取初始快照
6) 使用 VM 跟踪器拍摄初始快照
7)重现导致内存上升的步骤
8) 再拍一张
9) 使用 VM 跟踪器拍摄另一个快照

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

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

那么MALLOC_SMALL怎么能从72MB增长到224MB,但是heapgrowth只有45MB呢? Allocations 工具是否缺少 VMTracker 正在记录的内容?

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

任何帮助将不胜感激....我希望这是我不理解的关于这些工具如何工作的基本知识。

【问题讨论】:

    标签: performance macos memory-leaks instruments


    【解决方案1】:

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

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

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

    【讨论】:

    • 其实和苹果开发者指南差不多。
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2019-10-05
    • 2016-02-06
    • 2014-07-10
    相关资源
    最近更新 更多