使用Instruments可以监测分析app内存相关的 Overall Memory Use、 Leaked Memory、 Abandoned Memory、 Zombies等内容。

1.Blank(空模板):创建一个空的模板,可以从Library库中添加其他模板;

2.Activity Monitor(活动监视器):监控进程的CPU,内存,磁盘,网络使用情况 是程序在手机运行真正占用的内存大小

3.Allocations(内存分配):跟踪过程的匿名虚拟内存和堆的对象提供类名和可选保留/释放历史;

4.Cocoa Layout 观察NSLayoutConstraint对象的改变,帮助我们判断什么时间什么地点的constraint是否合理

5.Core Animation(图形性能)这个模块显示程序显卡性能以及CPU使用情况

6.CoreData 这个模块跟踪Core Data文件系统活动

7.Counters 收集使用时间或基于事件的抽样方法的性能监控计数器(PMC)事件 ?

8.Energy Log  耗电量监控

9.File Activity 检测文件创建,移动,变化,删除等

10.Leaks(泄漏):一般的措施内存使用情况,检查泄漏的内存,并提供了所有活动的分配和泄漏模块的类对象分配统计信息以及内存地址历史记录;

11.Metal System Trace (Metal API是apple 2014年在ios平台上推出的高效底层的3D图形API,它通过减少驱动层的API调用CPU的消耗提高渲染效率。

12.Network 用链接工具分析你的程序如何使用TCP/IP和UDP/IP链接

13.OpenGL ES Analysis 这个模块测量分析OpenGL ES活动正确性检测以及表现问题,提供解决建议

14.System Trace 系统跟踪,通过显示当前被调度线程提供综合的系统表现,显示从用户到系统的转换代码通过两个系统调用或内存操作

15.System Usage 这个模板记录关于文件读写,sockets,I/O系统活动, 输入输出

16.Time Profiler(时间探查):执行对系统的CPU上运行的进程低负载时间为基础采样。

17.Zombies  测量一般的内存使用,专注于检测过度释放的野指针对象,也提供对象分配统计,以及主动分配的内存地址历史

常用的有

Leaks,Zombies,Core Animation,Time Profiler,Cocoa Layout,Energy Log,Network

Paste_Image.png

一、 Allocations
点击XCode的Product菜单Profile启动Instruments,选择allocation,会自动启动allocation工具和模拟器。启动后,Allocations面板显示内存中的对象占用曲线,可以显示目前内存中分配了哪些对象,对象的数量,以及由哪些函数进行创建的。

Allocations可以监测到app中一般和虚拟内存的使用情况。统计到的内存类别有All Heap & Anonymous VM、All Heap Allocations、All Anonymous VM。我们无法控制Anonymous VM部分,所以一般只关注All Heap Allocations。

可以对每个动作的前后进行Generations,对比内存的增加,查看使内存增加的具体的方法和代码所在位置。具体操作是在右侧Generation Analysis里点击Mark Generation,这样会产生一个Generation,切换到其他页面或一段时间产生了另外一个事件时再点Mark Generation来产生一个新的Generation,这样反复,生成多个Generation,查看这几个Generation会看到Growth的大小,如果太大可以点进去查看相应占用较大的线程里右侧Heaviest Stack Trace里查看对应的代码块,然后进行相应的处理。

Paste_Image.png

Detail Pane中统计信息包含的类型:Statistics、Call Trees、Allocations List、Generations。
1>Statistics统计项:

Paste_Image.png

2>Call Trees统计项:

Paste_Image.png

3>Allocations List统计项:

Paste_Image.png

4>Generations统计项:

Paste_Image.png

二、Zombies
使用Zombies工具来查找僵尸对象: Zombies工具的查找原理其实和设置NSZombieEnabled环境变量的调试方法是一样的,启动Zombies后在内部设置了NSZombieEnabled为true。

启用了NSZombieEnabled的话,它会用一个僵尸对象来代替已释放对象。也就是在引用计数降到0时,该僵尸实现会将该对象转换成僵尸对象。僵尸对象的作用是在你向它发送消息时,就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,它会显示一段日志并自动跳入调试器, 因此我们就可以找到具体或者大概是哪个对象被错误的释放了。

三、Leaks
启动Leaks工具后,它会在程序运行时记录内存分配信息和检查是否发生内存泄露。
定位内存泄漏问题:点击Leak Checks时间条的红色叉,查看某行内存泄漏调用栈,会直接跳到内存泄漏代码位置。

Paste_Image.png

Details Pane包含的统计信息有:Leaks、Cycles &Roots、Call Tree。
1>Leaks统计项:

Paste_Image.png

2>Cycles&Roots统计项:

Leaks一个进程占用的内存空间,包括5种数据区:

(1)BSS段:通常存放未初始化的全局变量

(2)数据段:通常存放已初始化的全局变量

(3)代码段:存放程序执行代码

(4)堆:存放进程运行中被动态分配的内存段,如OC对象等

(5)栈:由编译器自动分配释放,存放函数参数,局部变量等

Analyze-静态分析

检测出的常见的三种泄露

(1).创建了对象没有使用。

(2).创建了对象,且初始化了,但初始化的值一直没有读取过。

Value store to ‘X’during its initialization is never.

(3).Potential leak of an object stored into 'XX'* 。 翻译一下:XX对象的内存单元有潜在的泄露风险。

product ——> Analyze就可以进行静态的内存分析了(或者鼠标左键长安运行按钮的右下角切换到Analyze模式)

Allocations是检测程序运行过程中的内存分配情况的。模板中一个叫(分配)Allocations,以及一个被称为VM Tracker(虚拟机跟踪)。

Allocations可以帮助我们查看全局内存使用情况(Overall Memory Use): 从全局的角度监测应用程序的内存使用情况,捕捉非预期的或大幅度的内存增长。

内存泄漏使用Leaks检测,如果对象发生内存泄漏,detail panel 中会看到对象的retain release历史记录,如果非对象发生内存泄漏,就会看到malloc和free的调用历史。

1.选中Leaks Checks,在Details所在栏中选择CallTree

2.Call Tree会给我们大概的位置,有时候会给我们精确的位置,选中出现内存泄漏的区域,缩小范围,筛选数据。

3.且在右下 Display Settings 中勾选 Invert Call Tree 和 Hide System Libraries 或其他选项可以过滤显示的数据。

4.在导航栏的筛选框中,我们可以输入关键字来筛选数据。

5.双击人头就可以进去对应得函数进行调优

四.Core Animation:

通过联调真机,可以观察到运行时每秒绘制了多少帧(60帧封顶,30帧以下可以感觉到卡顿越低越需要优化):

1.选中Color Blended Layers, 可以得到界面的红绿分布,其中红色的为透明部分,红色部分越多对性能影响越大。

注意 xcode 版本不同 Color Blended Layers位置也不同 具体看下面的图片

2.监测离屏渲染:

Color Offscreen-Rendered Yellow
Color Hits Green and Misses Red

五、性能监控计数器Counters

(CPU Samples 操作是会高,不操作时低切稳定,边玩手机边观察,可以看得到CPU的name )

六、Energy Log

耗电量监控 (可以看到手机的WiFi状态,蓝牙状态等等)

七、Time Profiler

当点击Time Profiler应用程序开始运行后. 就能获取到整个应用程序运行 消耗时间分布 和 百分比.

使用前须知

1.Time Profiler..:

,,MacMacCPUiOSMacGPUiOSCPUGPUGPUCAEAGLLayerOpenGL. .

2. .

在发布环境打包的时候,编译器会引入一系列提高性能的优化,例如去掉调试符号或者移除并重新组织代码.另iOS引入一种"Watch Dog"[看门狗]机制.

不同的场景下,“看门狗”会监测应用的性能。如果超出了该场景所规定的运行时间,“看门狗”就会强制终结这个应用的进程.

开发者可以crashlog看到对应的日志.但Xcode在调试配置下会禁用"Watch Dog".

Instruments详解相关推荐

  1. U-Boot 之五 详解 U-Boot 及 SPL 的启动流程

      在之前的博文 Linux 之八 完整嵌入式 Linux 环境介绍及搭建过程详解 中我们说了要一步步搭建整个嵌入式 Linux 运行环境,今天继续介绍 U-Boot 相关的内容.我所使用的硬件平台及 ...

  2. MYSQL performance schema详解

    MYSQL performance schema详解 0.performance_schema的介绍 ​ MySQL的performance schema 用于监控MySQL server在一个较低级 ...

  3. IOS 多线程04-GCD详解 底层并发 API

    IOS 多线程04-GCD详解 底层并发 API 注:本人是翻译过来,并且加上本人的一点见解. 前言 想要揭示出表面之下深层次的一些可利用的方面.这些底层的 API 提供了大量的灵活性,随之而来的是大 ...

  4. APP自动化测试系列之Desired Capabilities详解

    VOL 163 28 2020-09 今天距2021年94天 这是ITester软件测试小栈第163次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...

  5. 硬实时RTLinux安装配置详解 (一):准备工作

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦: 硬实时RTlinux系统配置 1. Linux内核下载 2. 下载与Linu ...

  6. mysql5.6配置文件详解(二)

     mysql5.6配置文件详解(二) 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wjn219.blog.51cto.co ...

  7. xcode各项配置详解

    1.Xcode IDE概览 说明:从左到右,依次是"导航窗格(Navigator)->边列(Gutter)->焦点列(Ribbon)->代码编辑窗口(Standard/Pr ...

  8. Linux操作系统之—所有端口详解大全手册

    Linux操作系统之-端口详解大全手册 0|无效端口,通常用于分析操作系统  1|传输控制协议端口服务多路开关选择器  2|管理实用程序  3|压缩进程  5|远程作业登录  7|回显  9|丢弃  ...

  9. linux查看端口及端口详解

    今天现场查看了TCP端口的占用情况,如下图 红色部分是IP,现场那边问我是不是我的程序占用了tcp的链接,,我远程登陆现场查看了一下,这种类型的tcp链接占用了400多个,,后边查了一下资料,说EST ...

最新文章

  1. 面试常问Handler 的问题合集
  2. 1,1 一维运动公式
  3. ansible自动化管理
  4. c语言链表代码大全,C语言实现链表
  5. NTFS文件系统的简述
  6. 【Clickhouse】Clickhouse Cannot create table with column ‘Int256‘ because experimental bigint types
  7. 黄金手镯一般多少克?
  8. 【SDOI 2009】学校食堂 Dining
  9. c语言计算圆周率的方法,c语言学习之不同方式计算圆周率
  10. 新版FMEA软件参数图(P图)免费申请试用(FMEAHunter)
  11. 后端接口生成微信小程序二维码Api
  12. Python文字识别
  13. FeedBurner 被阻尼,Feed 托管转到 FeedSky
  14. java学生基本信息管理_Java课程设计 - 学生基本信息管理
  15. 哒螨灵使用注意事项_哒螨灵的基础知识
  16. Hive常见的面试题
  17. 解读ConnectBot-1 telnet、ssh常识
  18. 测试用例-——教室和椅子
  19. 毕业设计选题推荐 - python毕设选题推荐 - 2023最新毕设选题 - 如何选题 避免被坑
  20. Android事件分发机制:ViewRootImpl篇(前传)

热门文章

  1. AboutServer
  2. 【Unity】创建一个自己的可交互AR安卓程序
  3. python整除运算符_Python
  4. 稀疏一元多项式(C++)
  5. 例题5-10 UVA 207 PGA Tour Prize Money PGA巡回赛的奖金
  6. MATLAB | 矩阵元素引用之求下标或序号(sub2ind、ind2sub函数使用)
  7. 向量代数与空间解析几何
  8. 谈谈能带来高薪报酬的软件技术有哪些?
  9. PADS Logic 原理图连接
  10. 你不知道的JS 沙箱隔离