利用 Traceview 精准定位启动时间测试的异常方法 (工具开源)

机智的防爬虫标识
原创博客地址:http://www.cnblogs.com/alexkn/p/7095855.html
博客求关注: http://www.cnblogs.com/alexkn

1.启动时间测试常用方案介绍

如何精确测试启动时间,其实这个问题可大可小,主要需要看团队对启动时间的测试精度要求,当启动时间测试误差需要精确到小几十毫秒时,很多问题都会暴露,因为其实目前很难有一种方式去评估数据的有效性。当前设备状态,CPU温度,内存,系统GC,研发人员的代码以及线程模式等,都有可能导致启动时间波动增大。目前已知的启动时间测试方案有几种,可以例举一下:

  • 插桩法:通过在整个启动的生命周期打日志,然后通过解析日志来得到本次启动时间
  • 录屏分帧:包括高速摄像头或者其他客户端录屏/截图,通过录制启动时间的整个过程,通过做分帧处理,来得到起始结束位置

但其实这些方法都有各自的问题,插桩引入的测试误差本身很小,但因为系统误差的关系,会导致本身波动会很大,而录屏分帧,虽然可以用于竞品分析,但测试误差会比较大,目前工业级的摄像头,也只能到8ms/帧率,一般高速摄像头的也会引入33ms的系统误差,此外,如果在android端录屏,可能会导致启动时间波动更加增大,因此如果单纯从测试方法上来改善启动时间测试,效果肯定不会好。因为我们需要明白,系统随机误差的引入,所以启动时间的测试数据是一个概率问题,而不是一个可以100%一定出现在某个区域的问题(有时间写一篇统计学跟误差分析的文章)。
其实自然而然这就引申出两个问题:

  • 问题定位方法的改进
  • 误差需要用科学的方法去做估算

当然这篇文章只讲第一个问题,也就是怎么去定位启动时间问题,下面进入正题。

2.启动时间问题定位方案

在这里要推荐的是TraceviewTraceview的介绍可以看这篇文章:https://testerhome.com/topics/5049

因为系统随机误差比较大,因此单独看某一个生命周期中的耗时,并不能帮助定位问题,而Traceview可以帮我们查看到每一个线程的调用栈以及方法的CPU时间或者堆栈累加时间。往往可以通过Traceview来做问题定位,但目前有一些限制:

  • 操作不超过5s
  • 在IDE上查看才比较方便
  • 大部分方法都混淆了,很难有效定位到对应的方法

其实这些问题都不是问题

  • Traceview可以通过android.os.Debug.startMethodTracing();android.os.Debug.stopMethodTracing();来打点,生成这段启动周期的Trace数据
  • google提供了一个半成品dmtracedump,可以解析Traceview文件,当然也只是半成品,但我们可以自己解析,但是是有办法突破IDE限制的
  • 混淆问题其实不算问题,一般都有自己的mapping文件去解混淆

3.方案应用

我们在版本迭代中,每一个小版本演进时,其实变动的方法并不会太多,那么,Traceview既然能看到进程,方法占用的CPU时间片,那我可以把所有的方法耗时做统计并做耗时排序,过滤掉系统线程以及不需要关注的线程,着重对比新增的方法以及改动的方法,然后我们逐一去过滤top异常的方法就行了。

实际应用上可以发现,用反混淆后的包去做对比测试,是可以很明显看到一些异常的耗时方法的。

4.思路拓展

这块其实还可以继续拓展一下,但我这块没有实践,可以把我的想法抛出来给大家。

  • 反混淆操作
  • 通过对比两个版本的Traceview方法,可以过滤出top方法
  • 拿到两个revision间的svnlog,过滤出改动的方法
  • 对比svnlogtop异常方法,自动将可疑方法邮件发给研发,实现监控问题到定位问题的闭环。

5.开源一个工具

目前工具已开源出来,地址为:https://github.com/alexknight/TraceAnalysis 
代码是一年半前写的,原来也只是边探索边验证效果,后面没有做重构,所以代码质量并不高。最近仅仅只是把功能抽了出来,如果能够帮到你,随手star让我更有动力输出一些有用的东西。
目前工具实现的功能包括

    • 支持反混淆
    • 支持获取Traceview文件的解析结果,json对象返回
    • 提供默认模板,支持Traceview两两对比,生成csv的结果文件
时间: 2024-08-07 16:59:44

利用 Traceview 精准定位启动时间测试的异常方法 (工具开源)的相关文章

如何实现室内Wi-Fi无线终端的精准定位

随着商圈020的兴起,室内定位技术的也如百花争艳般不断涌现.但随着室内Wi-Fi网的架设普及,基于Wi-Fi定位技术的无线定位网已在实际应用中独占鳌头!那如何能在室内对无线终端实现3~5米的精准定位了? 随着商圈020的兴起,室内定位技术的也如百花争艳般不断涌现.但随着室内Wi-Fi网的架设普及,基于Wi-Fi定位技术的无线定位网已在实际应用 中独占鳌头!那如何能在室内对无线终端实现3~5米的精准定位了?就此问题,我们采访了南京中科智达物联网系统有限公司的技术总监周洪凯.了解了目前室内 精准定位

利用ASP.NET MVC Filter 处理网站异常

1,Filter(筛选器)是基于AOP(面向方面编程)的设计,他的好处什么的就不是本文要说的,如果要了解关于filter的相关知识请参照,大神说的够清楚了:http://www.cnblogs.com/willick/p/3331520.html 这里主要记录一下我自己的利用ASP.NET MVC Filter 处理网站异常过程: 2,首先添加 一个自定义的filter类: using System; using System.Collections.Generic; using System.

API精准定位IP地址

突然发现百度的API越来越好用了,简单使用百度API精准定位IP地址.附Python代码 分类:Python (4778)  (5) 2016年11月27日08:13:13 API服务地址:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 使用方法:第一步,申请密钥(AK) ,作为访问服务的依据:第二步,拼写发送HTTP/HTTPS请求的URL,注意需使用第一步申请的AK:第三步,接收HTTP/HTTPS请求返回的数据(JSON

Arcgis andoid开发之应用百度地图接口实现精准定位与显示

怀着激动.兴奋的心情,在这个漫天柳絮的季节写下了这片博文,为什么呢,因为困扰我很久的一个技术性的问题得到了解决,发次博文,供大家参观.学习,同时,也以慰藉我长期困扰的心情,好了,废话不再,言归正传,看看这到底是个什么东西? 首先,简单地介绍一下功能:1.离线地图的加载:2.GPS的定位与显示.文字比较模糊,看看实际的效果图: 功能其实很简单,下面解释一下实现思路: 1.布局 <?xml version="1.0" encoding="utf-8"?> &

listctrl查找定位 使用测试过还很好用

35.listctrl查找定位  使用测试过还很好用 // 简单的查找函数// FindString(CListCtrl& , 查找内容 , 开始位置 , 到达底部时是否从头查找)int FindString(CListCtrl& list,LPCTSTR str,int startIndex,BOOL warp /* = TRUE */){ int colCount = list.GetHeaderCtrl()->GetItemCount(); CString* field = n

Android利用百度地图定位

百度地图照着百度的教程做的总是出现报错 请帮我看看错误在那 2013-12-13 15:16168海军 | 分类:百度地图 | 浏览1252次 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.map/com.example.map.MainActivity}: android.view.InflateException: Binary XML file line #11: Error i

Junit测试出现异常:Exception in thread &quot;main&quot; java.lang.NoSuchMethodError: org.junit.platform.commons.util.

在进行单元测试时,测试出现异常 Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader; 错误就在pom.xml的依赖中,仔细查看控制台输出你会发现IntelliJ IDEA正在尝试使用JUnit5运行我的测试用例. at com.intelli

如何利用Pre.im分发iOS测试包

大众创新万众创业,在移动互联网的风口,移动APP开发与测试发展方兴未艾,受到了越来越多的重视.相较 iOS,Android 的开发环境更加开放.Android 开发者要测试应用时,只需发个 APK 安装包即可,但对于 iOS 来说,想要参与 App 测试却是件很复杂的事情. Apple在收购TestFlight后将其整合进iTunes Connect中,虽然能帮助iOS开发者邀请用户协助对 App 进行测试,但过程依旧复杂. 在这样的背景下,国内权威测试平台Testin推出了免费的APP内测分发

为儿童精准定位防走失 智能手环做减法

智能手环作为较为早期的可穿戴产品,它们的功能大都聚焦在健康管理和运动监测领域,随着硬件技术达到一定时期的瓶颈,很多同质化产品集中出现在消费者的眼球中,“大而全”的手环越来越让人感到审美疲劳,伴随着这些,“新形态”的手环诞生了,设计师不断地给手环做着减法,这些手环不再去充当人们的百科全书,而是专注于两三个简约的功能,这些看似势单力薄的功能却完全可以充分展现. 为儿童 竣付通,全网最可靠的支付方式,最好的服务,最高的效率,最大的效益,给我们一个机会,给您一个惊喜!!!   第三方支付   竣付通qq