客户端性能监控方案

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上报策略。

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

推荐阅读更多精彩内容

  • 在这样一个注重用户体验的时代,APM 技术快速发展,国内更是百花齐放,最近对各个公司的 APM 产品有一个调研,并...
    Joy___阅读 27,251评论 30 278
  • 作者:敖志敏本文为原创文章,转载请注明作者及出处 国内移动网络环境非常复杂,WIFI、4G、3G、2.5G(Edg...
    沪江技术学院阅读 7,955评论 13 80
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,060评论 25 707
  • 夜色笼罩着大地 几家灯火倔强的亮起 于黑暗中逆袭 仿佛涅磐重生 若无心死的经历 又怎有重生的自己 拾起了自信 未来...
    诗汐星少阅读 201评论 0 0
  • 喜欢一个人。 可能是喜欢和这个人在一起的感觉,单纯只是因为开心。 这个人不够努力,而我刚好喜欢只是两个人一直呆在一...
    A__厚脸皮阅读 210评论 0 0