美文网首页
客户端性能监控方案

客户端性能监控方案

作者: CHEN_JC | 来源:发表于2018-08-16 08:58 被阅读0次

    Application Performance Management(APM),应用程序性能管理, 主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务。一个企业的关键业务应用的性能强大,可以提高竞争力,并取得商业成功。

    概述

    性能监控需要关注的指标主要有以下几类
    1、网络请求:成功率、状态码、流量、网络响应时间、HTTP与HTTPS的 DNS 解析、TCP握手、SSL握手(HTTP除外)、首包时间等时间

    Network方面:(按时间-版本:+域名,+地区,+运营商, +连接网络类型)

    • 平均相应时间
    • rpm(一分钟请求次数)
    • 总耗时
    • 传输数据大小
    • 再具体到某个API接口:
      (1) 平均http响应时间 (区分web Application(webview) 和 network);
      (2) rpm;
      (3) 平均数据传输大小(区分send和receive);

    2、界面卡顿(FPS)、卡顿堆栈
    3、崩溃率、崩溃堆栈
    4、Abort 率:也就是由于内存过高的等原因,被系统杀死的情况
    5、交互监控:页面加载时间、页面的交互痕迹

    APP启动次数、APP启动平均时间;
    Controller display次数、平均display时间;
    Controller display过程中各个method(包括UI thread、worker thread中的method)的平均执行时间;

    6、维度信息:接入网络、运营商、设备、系统版本、地区、app版本、统计时间
    7、其他:内存、帧率、CPU使用率、启动时间、电量等

    CPU和当前页面信息结合,可以评测每个页面的运算复杂度;
    内存和App运行时间结合,可以观察内存和使用时长的关系进而分析是否发生内存泄漏;
    FPS和卡顿信息结合,可以评估这次卡顿发生时App的性能究竟下降到什么程度。

    网络请求

    界面卡顿、卡顿堆栈
    iOS:

    Runloop,对于事件的处理主要就是在kCFRunLoopBeforeSources和kCFRunLoopBeforeWaiting状态之间,还有kCFRunLoopAfterWaiting之后。那我们就可以对两个状态进行监控,如果消耗时间太久,就代表着卡顿的发生。


    image.jpeg
    崩溃率、崩溃堆栈

    iOS:对于崩溃的情况,一般是由 Mach异常或 Objective-C 异常(NSException)引起的。我们可以针对这两种情况抓取对应的 Crash 事件。


    Abort 率

    目前对于内存过高被杀死的情况是没有办法直接统计的,一般通过排除法来做百分比的统计,原理如下

    • 程序启动,设置标志位
    • 程序正常退出,清楚标志
    • 程序Crash,清楚标志
    • 程序电量过低导致关机,这个也没办法直接监控,可以加入电量检测来辅助判断
    • 第二次启动,标志位如果存在,则代表Abort一次,上传后台做统计

    交互监控
    iOS

    对于页面的加载时间,直接通过Runtime hook对应的生命周期方法即可,比如 viewDidLoad、viewWillAppear等
    对于用户的交互痕迹,比如点击了那个按钮、跳转到了那个页面,这些信息偏于用户行为的收集,可以研发一个无埋点的SDK,专门来做用户行为数据的收集与分析,核心也是基于 hook AOP的思想。


    网络监控
    iOS

    对于成功率、状态码、流量,以及网络的响应时间之类的,我们可以主要可以通过两种方式来做

    • 针对URLConnection、CFNetwork、NSURLSession三种网络做Hook,hook的具体技术可以是method swizzle 也可以是Proxy、Fishhook之类的
    • 也可以使用 NSURLProtocol 对网络请求的拦截,进而得到流量、响应时间等信息,但是NSURLProtocol有自己的局限,比如NSURLProtocol只能拦截NSURLSession,NSURLConnection以及UIWebView,但是对于CFNetwork则无能为力
    Android

    基于AspectJ的AOP方式拦截网络请求API实现流量统计


    SDK设计
    image.png
    数据上传策略
    编号 策略名称 说明
    1 MTA_STRATEGY_INSTANT 实时发送,app每产生一条消息都会发送到服务器。
    2 MTA_STRATEGY_ONLY_WIFI 只在wifi状态下发送,非wifi情况缓存到本地。
    3 MTA_STRATEGY_BATCH 批量发送,默认当消息数量达到30条时发送一次。
    4 MTA_STRATEGY_APP_LAUNCH 只在启动时发送,本次产生的所有数据在下次启动时发送。
    5 MTA_STRATEGY_DEVELOPER 开发者模式,只在app调用void commitEvents(Context)时发送,否则缓存消息到本地。
    6 MTA_STRATEGY_PERIOD 间隔一段时间发送,每隔一段时间一次性发送到服务器。

    SDK默认为MTA_STRATEGY_APP_LAUNCH + wifi下实时上报,对于响应要求比较高的应用,比如竞技类游戏,可关闭wifi实时上报,并选择MTA_STRATEGY_APP_LAUNCH或MTA_STRATEGY_PERIOD上报策略。

    相关文章

      网友评论

          本文标题:客户端性能监控方案

          本文链接:https://www.haomeiwen.com/subject/wyuukftx.html