性能测试工具 搬运工 - Locating Memory Issues in Your App - iOS

55hhy · 2015年04月16日 · 最后由 易寒 回复于 2015年04月21日 · 2967 次阅读
本帖已被设为精华帖!

原文链接:https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/MemoryManagementforYourApp/MemoryManagementforYourApp.html#//apple_ref/doc/uid/TP40004652-CH11-SW1

开发中最重要的事情之一就是管理内存,内存是一个有限的资源。大多数程序员会用 Allocations 工具查看内存分配改变数据结构和算法,实现降低内存。

Examining Memory Usage with the Activity Monitor Trace Template
Activity Monitor 能够监控整个系统活动(activity)和状态(statistics),包括 CPU、memory、disk 和 network。可以单独使用 Activity Monitor,也可以跟其他工具集成。

不论是一个进程还是系统所有进程,Activity Monitor 在虚拟存储大小(virtual memory size)的基础上抓取系统加载信息,并绘制四张图表简洁明快地展示搜集的信息。其中两张图特别地描述了内存使用:1. Real Memory Usage(条形图),显示前五名内存;2. Real Memory Usage(饼图),显示总内存和前五名内存。
下图:系统内前五名内存展示

参数配置以及颜色调配:

Activity Monitor 提供了一系列的参数,涉及内存的有 Physical Memory Wired, Physical Memory Active, Physical Memory Inactive, Physical Memory Used, Physical Memory Free, Total VM Size, VM Page In Bytes, VM Page Out Bytes, VM Swap Used.

Finding Abandoned Memory with the Allocations Trace Template
Abandoned Memory: 先前分配的内存没有用。原因:某些没有完成的功能或者有个 bug 将已经 cache 的图片再加到 cache。
Leaked Memory: 先前分配的内存后来任何地方都用不上。也就是说,没有办法再释放的内存。

从技术上来说 abandoned memory 依旧有效,只是不好用,而 Leaks 工具没法定位,甚至得要一些摸索才能定位问题。Allocations 跟踪工具通过测量 heap memory usage 来定位问题,包括分类定位特定目标,还能分地区记录 virtual memory statistics。这需要 Allocations 和 VM Tracker 两个工具。为了解决 abandoned memory,需要严格使用 Allocations 工具。

当重复一系列组合操作时,用 Allocations 来保证 heap 不会持续增高。例如,关闭和开始一个新的游戏,打开和关闭一个窗口,设置和取消偏好,理论上这些操作应当不会导致 app 不能维持稳定的内存状态或恢复到之前的内存状态。重复操作的过程和分析是过程分析(generational analysis)。一个 “过程(generation)” 代表特定时间的一系列定位。通过多种过程中的重复操作,通过分析结果来确定某种倾向。发现这些倾向中的差异,就可以进一步确定 memory 是被 abandoned 的,以及哪里。最后修复问题。

如何使用:

  1. 打开 Allocations:
  2. 选择目标 app:
  3. 设置(这里有 Mark Generation 按钮,用于标记不同操作过程):
  4. 录制:
  5. app 上进行一小段可重复的操作,为了准确性,这些操作需要开始和结束都在相同的状态。
  6. 点击 Mark Generation:
  7. 重复第五步和第六步,直至确定 heap 是正常或者会突破标准,结束: 注:刚开始几次操作,会有些初始化例如 cache 和多余的定位。因此需要一些初始化过程来建立一个基准。然后,创建用于真实分析的步骤。录制完之后可以进行标记。
  8. 查看详细:
  9. 选择 Persistent 高的,点击左边的三角打开它的所有 instances
  10. 每一个 instance 都可以打开详细(Extend Detail)查看堆栈信息: 在堆栈信息中用户点击可以直接显示到代码的具体某一行,同时可以关闭堆栈信息中的系统通讯来更简单地找到代码。
  11. 双击直接显示代码: 同时可以直接进入到 Xcode 上:
  12. 检查 code 找出问题解决问题。
共收到 2 条回复 时间 点赞

看图看颜值的时代!

 易懂,谢谢。学习了。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册