Instruments概述

本文内容来自于学习《instrument user guide

 

一、启动方式

1. xcode:Xcode > Open Developer Tool > Instruments

2. docker

3. build时执行instrument

 

二、使用步骤

1. 打开instruments,选择target

2. 选择跟踪模板

3. 采集数据

4. 分析、检查数据

 

三、收集数据

1. target可以选择系统所有进程或者单独app

这里需要注意的是无线连接iOS设备的方法:

1)通过USB将iOS设备连接到PC;

2)按住Option键,点击target -> 选择iOS设备,enable wireless;

3)target -> 选择iOS设备的无线版本;

4)断开iOS和PC的USB连接;

注意设备关机后,数据收集会停止,需要重新连接后重新收集数据。

2. Dock中开启instruments

该方法支持后台收集、采样数据,支持的instruments模板有:

1)System Time Profile.

2)Time Profile Specific Process.

3)Automatically Time Profile Spinning Applications.

4)Allow Tracing of Any Process (10 hours).

3. 使用iprofile收集数据

iprofiler是一个命令行工具,不需要打开instruments就可以监控 app的性能,数据保存在.dtps文件中。数据收集结束之后可以导入到instruments模板中,图形化展示。支持的模板有:1)Activity Monitor. 2)Allocations. 3)Counters. 4)Event Profiler. 5)Leaks. 6)System Trace. 7)Time Profiler.

iprofiler使用样例:

1)使用time profiler和activity monitor instrument收集所有进程的数据,最终保存为allprocs.dtps.

iprofiler -timeprofiler -activitymonitor

2)使用Time Profiler instrument收集app数据,数据采集时间为8s,数据保存为/temp/YourApp_perf.dtps.

iprofiler -T 8s -d /temp -o YourApp_perf -timeprofiler -a YourApp

3)使用leaks和activity monitor采集PID=823进程的数据,采样时间为2.5s,最终保存为YourApp_perf.dtps.

iprofiler -T 2500ms -o YourApp_perf -leaks -activitymonitor -a 823

4)使用Time Profiler 和 Allocations instruments采集app数据,采集时间为默认时间(默认时间为10s),数据保存为/tmp/allprocs.dtps.

iprofiler -d /tmp -timeprofiler -allocations -a YourApp.app

5)app的地址为/path/to,参量为arg1,使用Time Profiler 和System Trace instruments采集数据,采集时间为15s,但是只保存最后2s的数据,文件保存为YourApp_perf.dtps.

iprofiler -T 15 -I 1000ms -window 2s -o YourApp_perf -timeprofiler -systemtrace /path/to/Your.app arg1

4. 将instrument工具对数据采集的影响最小化

1)降低采样间隔可以收集更多的数据,但是高采样率也可能会导致一些问题:每个采样都需要处理,高采样率消耗处理时间;采样间隔可能不一致; 采样数据过多会消耗内存;采样间隔的设置:打开Record Settings inspector

2)延迟模式:一般instruments都是在app执行的时候收集并且分析、展示数据。延迟模式下运行instruments是指等数据收集结束之后再分析数据,这种方式可以提高性能数据的准确性。设置方法:

为整个instruments设置deferred mode:instruments -> preferences > 勾选“always use deferred mode”;

为某一个trace设置derferred mode:file -> record options -> 勾选“deferred mode”;

 

四、检查数据

1. 符号化

当跟踪数据里面显示的是地址而不是可读性较强的符号,因此需要将地址转换为符号。地址和 符号的映射保存在dSYM文件中。instruments工具一般会自动找到dSYM文件,然后将地址转换为符号,如果instruments工具没有成 功找到dSYM文件,可以手动设置:files -> symbols > 选择需要符号化的可执行文件或者framework > “select dSYM or containing folder” > 找到dSYM文件(dSYM文件默认会保存在build文件夹下)。

2. 跟踪面板

1)在某一个时间点上添加标签flag:edit -> add flag;

2)放大、缩小:放大:按住shift键,拖拽选择要放大的数据;缩小:按住control键,拖拽选择要缩小的数据;

3)查看特定时间段内的数据:选择起点/终点 -> view -> set inspection range start/end

4)隔离观察一段数据:按住option键,选择一段数据,detail panel中显示这段时间内的详细信息。

3. 详细信息面板

不同的instruments,详细面板中显示不同的信息。

1)extend detail inspector: view -> inspectors > show extend detail;

2)显示代码;

3)隐藏/显示系统调用堆栈;

 

五、保存、导出

1. 保存单个跟踪文档;

2. 保存instruments跟踪模板;

3. 导出跟踪数据,导出格式为CSV文件(注意:不是所有的instruments都支持导出为csv文件);

4. 导入数据:使用命令行工具采样数据之后,可以导入到instruments中进行查看;

5. 自定义的instruments可以导出为脚本,然后用dtrace命令行工具执行该脚本。采样数据之后,可以导入到instruments进行查看。

 

六、定位内存问题

1. 使用activity monitor检查内存使用情况

activity monitor跟踪cpu、内存、网络,可以跟踪所有进程或者单个进程。它有一系列的系统统计信息可供选择: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

2. 内存不合理运用

Abandoned Memory,也就是存在已分配内存的引用,但实际上程序中不会使用。检测方法是重复进行一些操作heap不会持续增长。每次重复这些操作后,点击mark Generations button,会设置一个flag,然后查看每个迭代的详细数据。

3. 内存泄漏

内存泄露即内存被分配了,但程序中已经没有指向该内存的指针,导致该内存无法被释放。使用leak instruments检测。倘若对象发生内存泄露,detail panel中会看到对象的retain release历史记录。倘若是非对象发生内存泄露,会看到malloc和free的调用历史

4. Zombies

Zombie 问题即因程序员在代码中引用了“Zombie 对象”而导致应用程序崩溃。所谓 Zombie 对象,即已经deallocated 的对象,这些对象的 retainCount 都已经为 0,通过正常的手段我们无法在 debug 中跟踪和观察它们。zombies instruments可以用来跟踪这类问题。注意zombies instrumens使用debug模式,并且将环境变量NSZombieEnabled设为true。

 

七、检测I/O活动

1. 网络使用

activity monitor instruments可以跟踪网络,网络相关的统计信息有:1)Net Packets In;2)Net Bytes In;3)Net Packets Out;4)Net Bytes Out;5)Net Packets In Per Second;6)Net Packets Out Per Second;7)Net Bytes In Per Second;8)Net Bytes Out Per Second

2. 网络连接

检测iOS app如何使用TCP/IP 和 UDP/IP。与connections instruments一起使用,可以检测app发送和接收的包数目。

八、图像性能检测

1. core animation graphics:用来检测帧频率

2. OpenGL activity

3. GPU Driver

 

九、CPU使用

1. Performance Monitor Counters

2. 电量:Energy Diagnostics Trace Template

跟踪电量、CPU、网络、显示亮度、睡眠/唤醒、蓝牙、wifi、GPS。

可以全天开启 Energy Diagnostics Log模式(在开发手机设备中,设置->开发者选项,该设置重启设备后会消失)。注意如果设备电量低、关机了,log数据会丢失。数据收集结束后, 将log数据传到PC上,使用energy diagnostics instruments分析该数据。

3. 线程使用Multicore Trace Template

分析多核性能,比如线程状态、调度队列、块使用情况。Multicore Trace Template包含thread states和dispatch instruments。

4. Time Profiler Trace Template检测内核使用情况

 

十、UI automation

这一部分大家应该用的比较多,这里放一张UI元素的层次结构图。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 版本记录 前言 我们在做app的时候,不是做完功能就结束了,很多时候是需要进行检查和优化的,而xcode自带了一个...
    刀客传奇阅读 2,694评论 0 1
  • 概述 当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件...
    咖灰阅读 5,870评论 0 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • 先来一发苹果官网上Instruments User Guide,其实没啥用,英语不好的也懒得去看。(反正我是看不懂...
    和珏猫阅读 29,691评论 51 376
  • 更新于:20170814更新于:20171222再次更新于:20180823 最近的几天在看一些 Instrume...
    双门阅读 55,053评论 39 315