instrument之Time Profiler总结

一.工欲善其事必先利其器

time profile时间分析工具用来检测应用CPU的使用情况,可以看到应用程序中各个方法正在消耗CPU时间,使用大量CPU不一定是个问题。客户端中动画就对CPU依赖就非常高,动画本身也是非常苛刻且耗费资源较多的任务。

Time Profiler帮助我们分析代码的执行时间,找出导致程序变慢的原因,告诉我们“时间都去哪儿了?”。

Time Profiler分析原理:它按照固定的时间间隔来跟踪每一个线程的堆栈信息,通过统计比较时间间隔之间的堆栈状态,来推算某个方法执行了多久,并获得一个近似值。其实从根本上来说与我们的原始分析方法异曲同工,只不过其将各个方法消耗的时间统计起来。

原始的性能分析方法

这种分析方法估计是很多开发人员第一时间想到的,写个单元测试,在开始和结束的地方记录时间。

示例代码:

NSDate *startDate = [NSDate date];
for(int i = 0; i < 999; i++){
    // do something
}
NSDate *endDate = [NSDate date];
NSLog(@"time:%f", [endDate timeIntervalSinceDate: startDate]);

这种方法的缺点有以下几点:

1、测试效率太低,很多性能瓶颈是很难预估到的,需要从上层到下层进行逐步排除;

2、无法对界面渲染的效率进行测试,找出界面性能瓶颈;

3、NSLog的分析不够精确,可能在模拟器上由于开发设备性能速度快,无法明显区分出性能瓶颈。

二.使用Time Profiler前须知

1.当点击Time Profiler应用程序开始运行后.就能获取到整个应用程序运行消耗时间分布和百分比.为了保证数据分析在统一使用场景真实行有如下点需要注意:

在开始进行应用程序性能分析的时候,一定要使用真机,模拟器运行在Mac上,然而Mac上的CPU往往比iOS设备要快。相反,Mac上的GPU和iOS设备的完全不一样,模拟器不得已要在软件层面(CPU)模拟设备的GPU,这意味着GPU相关的操作在模拟器上运行的更慢,尤其是使用CAEAGLLayer来写一些OpenGL的代码时候. 这就导致模拟器性能数据和用户真机使用性能数据相去甚运.

2.另外在开始性能分析前另外一件重要的事情是,应用程序运行一定要发布配置 而不是调试配置.

在发布环境打包的时候,编译器会引入一系列提高性能的优化,例如去掉调试符号或者移除并重新组织代码.另iOS引入一种"Watch Dog"[看门狗]机制.不同的场景下,“看门狗”会监测应用的性能。如果超出了该场景所规定的运行时间,“看门狗”就会强制终结这个应用的进程.开发者可以crashlog看到对应的日志.但Xcode在调试配置下会禁用"Watch Dog".

三.time profiler的主界面(几个需要关注的重点区域)

视图开关:分别为三个视图的开关,全部选上可达到主界面截图效果。

搜索条:如果您需要快速查找具体的类或函数,可在些输入类名或者函数名,会有意想不到的效果。

数据可视化面板:可在此设置您需要关注的范围,以便将不相干的内容过滤掉。

详情面板:在time profiler下主要是看Call Tree和Sample List这两种视图:

调用树(Call Tree)

Running Time:函数运行的时间,这个时间是累积时间

Self:在栈顶次数

Symbol Name:被调用函数的符号信息

从详情面板Call Tree与相关内容扩展详情面板对应的关系图:

详情面板更多的信息选项

样本列表(Sample List)

Timestamp:采样的开始时间

Dep:堆栈深度

CPU:线程运行在那一个CPU上

Process:进程名称

Thread:所在的线程名称

Hot Frame:采样中调用最多的函数

Responsible Library:调用该函数的库

Responsible Caller:调用该函数的函数

选项视图参数设置

Separate byt Thread(建议选择):通过线程分类来查看那些纯种占用CPU最多。

Invert Call Tree(不建议选择):调用树倒返过来,将习惯性的从根向下一级一级的显示,如选上就会返过来从最底层调用向一级一级的显示。如果想要查看那个方法调用为最深时使用会更方便些。

Hide Missing Symbols(建议选择):隐藏丢失的符号,比如应用或者系统的dSYM文件找不到的话,在详情面板上是看不到方法名的,只能看一些读不明的十六进值,所以对我们来说是没有意义的,去掉了会使阅读更清楚些。

Hide System Libraries(建议选择):选上它只会展示与应用有关的符号信息,一般情况下我们只关心自己写的代码所需的耗时,而不关心系统库的CPU耗时。

Flatten Recursion(一般不选):选上它会将调用栈里递归函数作为一个入口。

Top Functions(可选):选上它会将最耗时的函数降序排列,而这种耗时是累加的,比如A调用了B,那么A的耗时数是会包含B的耗时数。

四.使用技巧

1.图标为黑色头像的就是Time Profiler给我们的提示,有可能存在性能瓶颈的地方

2.按着option键在主界面6中通过拖动鼠标来选择需要过滤的时间段

3.Command+F查找过滤的函数名或者类名

4.关联代码

5.Call Tree Constraints过滤

Count:设置调用的次数(调用2次以上的方法)

Time (ms):设置耗时范围(耗时20毫秒以上的方法)

筛选结果示例图

时间: 2024-10-15 02:16:22

instrument之Time Profiler总结的相关文章

Unity技术支持团队性能优化经验分享

https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490321&idx=1&sn=f9f34407ee5c5d0d1edb478981299108&chksm=fe1e2fbac969a6acee4eddb865d161fe09400c9147794c777ea4087e59f1e5fc3ccca5d1d0dd&scene=21#wechat_redirect 在10月26日的Unity独立游戏日上,

ios测试的instrument的初步使用

iOS 开发:用 Instruments 来检验你的app 1.准备好测试的样式程序进行测试. "时间探测器" 某种程度上来说,你开发过程中是可以忽略性能优化的. 应该多一点考虑程序的性能,可以借助数据化图形化的输出方式. 与其花费时间在优化小细节上不如多点时间找到你改优化的地方. 时间事件查看器  --> Time Profiler 打开Instrument的步骤:xcode --> open developer Tool --> instrument 选取相应的s

【转】分析器窗口 Profiler window

转自unity圣典: http://game.ceeger.com/Manual/ProfilerWindow.html http://game.ceeger.com/Manual/Profiler.html 分析器窗口 Profiler window Date:2013-07-01 13:44 Attaching to Unity players 附加到Unity播放器 To profile your game running on an other device or a player ru

JVM CPU Profiler技术原理及源码深度解析

研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能瓶颈.Profiling技术是一种在应用运行时收集程序相关信息的动态分析手段,常用的JVM Profiler可以从多个方面对程序进行动态分析,如CPU.Memory.Thread.Classes.GC等,其中CPU Profiling的应用最为广泛.CPU Profiling经常被用于分析代码的执行热点,如“哪个方法占用CPU的执行时间最长”.“每个方法占用CPU的比例是多少”等等,通过CPU Profiling得到上述相

Instrument API介绍

1. Instrumentation介绍 ?JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编程接口,是 JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface)的更新版本.JVMTI 提供了一套"代理"程序机制,可以支持第三方工具程序以代理的方式连接和访问 JVM,并利用 JVMTI 提供的丰富的编程接口,完成很多

How Does CLR Profiler Work?

In order to use a profiler properly, you need to understand how the data was collected and the limitations of the tool. The CLR Profiler uses a special interface to the runtime that allows it to get callbacks when particular events happen within the

Ruby Profiler详解之ruby-prof(I)

项目地址: ruby-prof 在上一篇 Ruby 中的 Profiling 工具中,我们列举了几种最常用的 Profiler,不过只是简单介绍,这一次详细介绍一下 ruby-prof 的使用方法. ruby-prof 是比较强大的,支持 cpu,内存使用,对象分配等等的性能分析,而且提供了很多友好的输出格式,不仅仅是有基于文字,html 的格式,还能输出 graphviz 格式的 dot 文件,以及适用与 KCacheGrind 的call tree格式, 其实这个格式是基于 Valgrind

java.lang.Instrument 代理Agent使用

java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码.这通常是在类的main方法调用之前进行预处理的操作,通过java指定该类的代理类来实现. (1) 代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也就是在main方法执行之前,执行agent的代码. agent的代码与你的main方法在同一个JVM中运行,并被同一个system classloader装载,被同一的安全策略 (security poli

Android设备连接Unity Profiler性能分析器

Unity提供两种方式让Developer的Android设备连接Profiler进行性能分析: 1.通过wifi,Android设备和计算机处于同一个Wlan中. 2.通过USB ADB 一般情况我们的计算机都是网线,所以我们采用ADB的方式.相比与wifi,ADB也更及时的反应设备性能. 官方的英文文档如下: http://docs.unity3d.com/Manual/Profiler.html For ADB profiling, follow these steps: Attach y