版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.06.19 |
前言
我们在做app的时候,不是做完功能就结束了,很多时候是需要进行检查和优化的,而xcode自带了一个很好的检查工具,可以检测内存泄漏。还可以查看哪一个方法比较耗时。还可以检测离屏渲染等等,随后的几篇我们就说一下这个工具的使用。先给出官方指导文档
这一篇就先说一下instruments的简单实用。
一、 认识instruments
Instruments 是应用程序用来动态跟踪和分析 Mac OS X 和 iOS 代码的实用工具,可以帮你更好的理解应用程序和操作系统的行为。你可以使用它来跟踪同 一进程不同方面的行为。你也可以记录一系列用户界面的动作并响应它们,同时也可以使用一个或多个 instruments 工具来收集数据。instruments 工具适用于xcode3.0和Mac OSX10.5。
Instruments 可以实现下面功能:
- 分析一个或多个进程的行为。
- 记录一系列用户的动作并响应它们,可靠的再现这些事件并收集多次运行的数据。
- 创建你自己自定义的 DTrace instruments 来分析系统和应用程序的行为。
- 保存用户界面记录和instruments的配置为模板,并从Xcode里面访问。
- 追查代码中难以重现的问题。
- 对你的程序进行性能分析。
- 自动化测试你的代码。
- 对你程序进行压力测试。
- 进行一般的系统级故障诊断。
- 对你的代码如何工作有更深入的了解。
每个 instruments 收集和显示不同类型的数据,比如文件访问、内存使用等等。 Instruments 包括一个标准 instruments 工具库,你可以使用它分析你代码的很多方 面。你可以配置 instruments 来收集关于同一个或者不同系统进程的数据。你可以使 用自定义的 instruments 工具新建接口来创建新的自定义 instruments 工具,它使用 DTrace 程序来收集你想要的数据。
所有 Instruments 的工作都在一个跟踪文档(trace documents)里面完成。一 个跟踪文档收集那些被 instruments 聚集的与该文档有关的数据。每个跟踪文档通常 包含一个会话的价值数据,这也是作为一个单一的跟踪。你可以保存跟踪文档到你已 经收集的跟踪数据备份里面,然后可以在以后再次打开并查看它们。
尽管大部分的 instruments 工具旨在收集数据,但是其中最精密的 instruments 工具可以帮助自动化收集数据。
二、启动instruments
1.从Finder启动
可以在Finder里面双击Instruments应用的图标来启动,如下图所示。
选择相应的app,双击打开即可。
2.从xcode启动
它也可以从xcode启动,如下图所示。
不管是哪种启动,最后启动后都是如下的画面。
三、创建跟踪文档
当你启动 Instruments 后,应用会自动为你创建一个文档。你同样可以通过选择 File > New 来创建一个新的文档。你每创建一个新的文档,Instruments 都会 示你选择一个开始模板。这些模板 定义了一些你将要在你的跟踪文档里面使用的 instruments 工具集。Instruments 供了几种不同的模板。
下面我们就看一下开始模板。
项目 | 详情 |
---|---|
1.Blank | 创建一个空的模板,你可以自定义的添加各种工具。 |
2.Activity Monitor | 可以只用这个模板,研究系统工作负载和虚拟内存大小的关系 |
3.Allocations | 将Allocations和VM跟踪器加到跟踪文档中,使用该工具可以监视内存和对象的内存分配方式和情况。 |
4.CocoaLayout | 是一种Cocoa布局工具 ,可以应用于iOS模拟器和Cocoa桌面应用,但是不能和连接的iOS设备一起使用。观察NSLayoutConstraint对象的改变,帮助我们判断什么时间什么地点的constraint是否合理 |
5.Core Animation | 将CoreAnimation加入到跟踪文档中,可以测量ios设备上每秒的CoreAnimation帧数,这可以帮助你理解内容是如何渲染到屏幕上的,(图形性能)这个模块显示程序显卡性能以及CPU使用情况。 |
6.CoreData | 将CoreData数据提取、缓存缺失和存储加入到跟踪文档中,使用这个工具可以检测应用程序中数据的存储交互。 |
7.Counters | 收集使用时间或基于事件的抽样方法的性能监控计数器(PMC)事件。 |
8.Energy Log | 耗电量监控,将Energy Diagnostics, CPU Activity, Display Brightness, Sleep/Wake, Bluetooth, WiFi, and GPS instruments加入到跟踪文档中进行检测。 |
9.File Activity | 将File Activity, Reads/Writes, File Attributes, and Directory I/O instruments 加入到跟踪文档中,只用这个模板可以让你检查系统文件的使用情况,可以检查文件的打开、关闭、读和写操作,同时也可以检测文件系统本身的改变,包括权限和所有权发生的改变。 |
10.Leaks | 将the Allocations and Leaks instruments加入到模板中,使用这个模板可以帮助你检测内存的泄漏。 |
11.Metal System Trace | 它是是apple 2014年在ios平台上推出的高效底层的3D图形API,它通过减少驱动层的API调用CPU的消耗提高渲染效率。 |
12.Network | 用链接工具分析你的程序如何使用TCP/IP和UDP/IP链接。 |
13.OpenGL ES Analysis | 将OpenGL ES Analyzer and OpenGL ES Driver加入到模板中,这个模块测量分析OpenGL ES活动正确性检测以及表现问题,提供解决建议。 |
14.System Trace | 系统跟踪,通过显示当前被调度线程提供综合的系统表现,显示从用户到系统的转换代码通过两个系统调用或内存操作。 |
15.System Usage | 这个模板记录关于文件读写,sockets,I/O系统活动, 输入输出。 |
16.Time Profile | 执行对系统的CPU上运行的进程低负载时间为基础采样。 |
17. Zombies | 测量一般的内存使用,专注于检测过度释放的野指针对象,也提供对象分配统计,以及主动分配的内存地址历史。 |
其中常用的有以下几种工具:
Allocations,Leaks,Zombies,Core Animation,Automation,Time Profiler,Cocoa Layout,Energy Diagnostics,Network
我上面的数据都是xcode8带的,有细心的读者会发现,以前的模板貌似功能更多些,其实都差不多只是合并了而已。
下面按照功能划分,看一下这些工具是怎么使用的。
定位内存问题
- 内存不合理引用,检测重复操作内存是否持续增长 Allocations
每次操作后,点击mark generations button,会设置一个flag,然后查看每个迭代的详细数据。 - 内存泄漏Leaks,内存泄漏使用Leaks检测,如果对象发生内存泄漏,detail panel 中会看到对象的retain release历史记录,如果非对象发生内存泄漏,就会看到malloc和free的调用历史。
- 野指针Zombies,Zombie问题,引用retaincount为0的对象,使用Debug模式,将环境变量NSZombieEnabled设为true。
检测I/O活动
检测iOS app如何使用TCP/IP和UDP/IP,与connections Instruments一起使用,检测app发送和接收的包数目。
图像性能检测
- core animation graphics 用来检测帧频率
- OpenGL activity
- GPU Driver
** CPU使用**
- Performance Monitor Counters。
- 电量:Energry 跟踪电量、CPU、网络、显示亮度、睡眠/唤醒、蓝牙、wifi、GPS。可以全天开启Energry Diagnostics Log模式,在开发手机设备中,(重启或关机会丢失该数据),数据收集结束后,将log数据传到PC上。
- 线程使用Multicore Trace Template,分析多核性能,线程状态、调度队列、块使用情况。Multicore Trace Template包含Thread states和dispatch Instruments。
- Timer Profiler Trace Template检测内核使用情况。
自动化测试
UI automation Automation instrument 工具允许你让 iOS 应用的用户界面测试自动化。自动化界面测试可以让你:
- 省去关键人员和释放其他工作资源
- 执行更多综合测试
- 开发可重复的回归测试
- 减少程序错误
- 提高开发周期,产品更新
如果你不想让 Instruments 在你新建一个文档的时候询问你使用那个模板,你可 以在 Instruments 的偏好设置里面勾选 Suppress template chooser 选项来禁止模板选择。
后记
这个工具用起来是真的爽,特别是在优化的时候,可以很好的解决你的疑问和困惑,今晚已经很晚了,未完,待续~~