认识iOS应用性能管理 -- 读《iOS监控编程》

由于自己待的小厂,没有做过APM(Application Performance Management,应用性能管理)相关的东西,被问及这方面内容的时候有些懵,于是读了下这本书,稍微补了点APM的知识。

整本书薄薄的一百多页,两天就能读完,把iOS的APM分为以下六个部分:

  1. 日志监控
  2. 崩溃监控
  3. 卡顿监控
  4. 网络监控
  5. 硬件监控
  6. 内存泄露监控

同时配套了作者自己开源的一个APM大轮子GodEye

日志监控

解决的问题:

手机不连上Xcode就没法查看日志

原理:

用NSLog打的日志都进入了ASL(Apple System Log)中。ASL相当于系统存放日志的数据库。苹果提供了API可以从ASL里捞出你想要的日志。

崩溃监控

解决的问题:

QA发现崩溃后跑来找开发,结果无法重现

原理:
  1. 对于未捕获异常崩溃,利用NSSetUncaughtExceptionHandler在崩溃前的最后一刻留下遗言
  2. 对于底层信号崩溃,利用内核提供的API signal,给不同的崩溃信号设置处理函数

卡顿监控

解决的问题:

卡顿发生的很随机,且卡顿原因无法捕捉

原理:

主线程发生了卡顿,一定是在主Runloop的一次迭代中,执行了一个很长时间的任务,导致它迟迟不能干完活去休息。

  1. Runloop的解决方案
    可以利用信号量,或者定时器的方式(书中利用了信号量)。监测到卡顿后记录下调用堆栈,就可以上报服务端了。
    1.1 利用信号量
    主线程观察主Runloop的状态变化,每次状态有变化signal一个信号量。子线程开一个死循环,循环一开始wait这个信号量。在超时阈值n秒内等到信号量的话说明这次不卡,开启下次迭代。如果n秒内没等到信号量而超时,说明可能有点卡,记一笔,连续5次这样的话就算一次卡顿。
    1.2 利用定时器
    主线程观察主Runloop的状态变化,在AfterWaiting(Runloop醒来准备开始干活了)状态记录一个时间戳x,在BeforeWaiting(Runloop干完活准备去休息了)状态将时间戳x清零。子线程开启定时器,每隔0.5秒算出当前时间戳和x之间的差值,如果差值大于某个阈值则认为发生了卡顿。
  2. GCD的解决方案
    开个子线程,里面开个死循环,循环一开始子线程通过GCD扔一个block到main queue去执行,扔完自己就去睡个n秒(n为卡顿阈值)。在醒来前block要是还没被执行到的话,就认为发生了卡顿。

网络监控

解决的问题:

必须开Charles才能看到网络请求和返回。

原理:

利用NSURLProtocol拦截请求

硬件监控

解决的问题:

出现性能问题时看不到各项硬件指标

原理:

内核提供了API可以拿到CPU,内存,流量,温度等信息。
帧率FPS监控的原理:利用CADisplayLink算出某一段时间n(n >= 1)内刷新的帧数x,FPS = x / n

内存泄露监控

解决的问题:

必须要Instruments才能查内存泄露

原理:

大多数情况下,一个UIViewController被pop或dismiss后,它的view以及subviews等会很快释放。所以在一个UIViewController被pop或dismiss后的一段时间内,看看它的view以及subviews还在不在。

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

推荐阅读更多精彩内容

  • 作者:敖志敏本文为原创文章,转载请注明作者及出处 为什么写这篇文章? 随着移动互联网向纵深发展,用户变得越来越关心...
    沪江技术学院阅读 6,037评论 2 83
  • 在这样一个注重用户体验的时代,APM 技术快速发展,国内更是百花齐放,最近对各个公司的 APM 产品有一个调研,并...
    Joy___阅读 26,937评论 30 277
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,568评论 25 707
  • 新文连载 红袖添香之时,你我再不相见 我,就这样走了,穿上这血红嫁衣,拂袖一饮,与君相别,后会无期。 那日我离去,...
    瓶子大大阅读 182评论 0 1
  • 明月暗相识, 枯花空折枝。 憔悴伊人泪, 鸿雁归来迟。
    SupperRay阅读 168评论 5 1