ios10手机系统微信ios卡顿监控系统打字卡顿是怎么回事

微信iOS卡顿监控系统
我的图书馆
微信iOS卡顿监控系统
引子微信 iOS 团队在值班的时候,时不时会收到这样的卡顿反馈:“用户A 刚才碰到从后台切换前台卡了一下,最近偶尔会遇到几次”、“用户B 反馈点对话框卡了五六秒”、“现网有用户反馈切换 tab 很卡”。这些反馈有几个特点,导致跟进困难:不易重现。可能是特定用户的手机上才有问题,由于种种原因这个手机不能拿来调试;也有可能是特定的时机才会出问题,过后就不能重现了(例如线程抢锁)。操作路径长,日志无法准确打点对于这些界面卡顿反馈,通常我们拿用户日志作用不大,增加日志点也用处不大。只能不断重试希望能够重现出来,或者埋头代码逻辑中试图能找的蛛丝马迹。随着微信的发展普及,这类问题积累得越来越多,为了攻城狮的尊严,我们感觉到有必要专门处理一下了。原理在开始之前,我们先思考一下,界面卡顿是由哪些原因导致的?死锁:主线程拿到锁 A,需要获得锁 B,而同时某个子线程拿了锁 B,需要锁 A,这样相互等待就死锁了。抢锁:主线程需要访问 DB,而此时某个子线程往 DB 插入大量数据。通常抢锁的体验是偶尔卡一阵子,过会就恢复了。主线程大量 IO:主线程为了方便直接写入大量数据,会导致界面卡顿。主线程大量计算:算法不合理,导致主线程某个函数占用大量 CPU。大量的 UI 绘制:复杂的 UI、图文混排等,带来大量的 UI 绘制。针对这些原因,我们可以怎么定位问题呢?死锁一般会伴随 crash,可以通过 crash report 来分析。抢锁不好办,将锁等待时间打出来用处不大,我们还需要知道是谁占了锁。大量 IO 可以在函数开始结束打点,将占用时间打到日志中。大量计算同理可以将耗时打到日志中。大量 UI 绘制一般是必现,还好办;如果是偶现的话,想加日志点都没地方,因为是慢在系统函数里面。如果可以将当时的线程堆栈捕捉下来,那么上述难题都迎刃而解。主线程在什么函数哪一行卡住,在等什么锁,而这个锁又是被哪个子线程的哪个函数占用,有了堆栈,我们都可以知道。自然也能知道是慢在UI绘制,还是慢在我们的代码。所以,思路就是起一个子线程,监控主线程的活动情况,如果发现有卡顿,就将堆栈 dump 下来。流程图描述如下:细节原理一旦讲出来,好像也不复杂。魔鬼都是隐藏在细节中,效果好不好,完全由实现细节决定。具体到卡顿检测,有几个问题需要仔细处理:怎么知道主线程发生了卡顿?子线程以什么样的策略和频率来检测主线程?这个是要发布到现网的,如果处理不好,带来明显的性能损耗(尤其是电量),就不能接受了。堆栈上报了上来怎么分类?直接用 crash report 的分类不适合。卡顿 dump 下来的堆栈会有多频繁?数据量会有多大?全量上报还是抽样上报?怎么在问题跟进与节省流量直接平衡?1. 判断标准怎么判断主线程是不是发生了卡顿?一般来说,用户感受得到的卡顿大概有三个特征:FPS 降低CPU 占用率很高主线程 Runloop 执行了很久看起来 FPS 能够兼容后面两个特征,但是在实际操作过程中发现 FPS 不好衡量,抖动比较大。而对于抢锁或大量 IO 的情况,光有 CPU 是不行的。所以我们实际上用到的是下面两个准则:CPU 占用超过了100%主线程 Runloop 执行了超过2秒2. 检测策略为了降低检测带来的性能损耗,我们仔细设计了检测线程的策略:内存 dump:每1秒检查一次,如果检查到主线程卡顿,就将所有线程的函数调用堆栈 dump 到内存中。文件 dump:如果内存 dump 的堆栈跟上次捕捉到的不一样,则 dump 到文件中;否则按照斐波那契数列将检查时间递增(1,1,2,3,5,8…)直到没有遇到卡顿或卡顿堆栈不一样。这样能够避免同一个卡顿写入多个文件的情况,也能避免检测线程围着同一个卡顿空转的情况。3. 分类方法直接用 crash report 的分类方法是不行的,这个很好理解:最终卡在 lock 函数的卡顿,外面可能是很多不同的业务,例如可能是读取消息,可能是读取联系人,等等。卡顿监控需要仔细定义自己的分类规则。可以是从调用堆栈的最外层开始归类,或者是取中间一部分归类,或者是取最里面一部分归类。各有优缺点:最外层归类:能够将同一入口的卡顿归类起来。缺点是层数不好定,可能外面十来层都是系统调用,也有可能第一层就是微信的函数了。中间层归类:能够根据事先划分好的“特征值”来归类。缺点是“特征值”不好定,如果要做到自动学习生成的话,对后台分析系统要求太高了。最内层归类:能够将同一原因的卡顿归类起来。缺点是同一分类可能包含不同的业务。综合考虑并一一尝试之后,我们采用了最内层归类的优化版,亦即进行二级归类。第一级按照最内倒数2层归类,这样能够将同一原因的卡顿集中起来;第二级分类是从第一级点击进来,然后从最内层倒数4层进行归类,这样能够将同一原因的不同业务分散归类起来。最终效果如下图:一级分类:二级分类:4. 可运营在正式发布之前,我们进行了灰度,以评估卡顿对用户的影响。收集到的结果是用户平均每天会产生30个 dump 文件,压缩上传大约要 300k 流量。预计正式发布的话会对后台有比较大的压力,对用户也有一定流量损耗。所以必须进行抽样上报。抽样上报:每天抽取不同的用户进行上报,抽样概率是5%。文件上传:被抽中的用户1天仅上传前20个堆栈文件,并且每次上报会进行多文件压缩上传。白名单:对于需要跟进问题的用户,可以在后台配置白名单,强制上报。另外,为了减少对用户存储空间的影响,卡顿文件仅保存最近7天的记录,过期删除。效果主线程卡顿监控在微信5.3.1灰度以来,已经成功解决了不少常规手段无法定位的难题,包括:订阅号更新导致微信切换前台很卡(500+订阅号)通讯录延迟加载导致偶尔卡一下(1k+好友)他山之石与后续工作移动客户端性能优化是个很大的话题,也是一个快速发展的领域。我们在这里抛砖引玉,欢迎各位同学一起讨论,相互学习进步。主线程卡顿跟 iOS 的 0x8badf00d 异常 (failed to resume in time),或 Android 的 ANR(Application Not Response)类似。这些系统基本的行为的缺点是场景很少,基本上是超时10秒以上才会捕捉到,导致的后果是数据量很少,并且很多卡顿问题是没有覆盖到的。跟其他同事有了解到另外一种方法,就是 hook了msgSend 把每个函数的耗时记录下来。这个方法思路也很新颖,不过个人觉得性能损耗可能比较大,很难在正式版带上。如果主线程占用了100%的 CPU,那么怎么保证检测子线程可以有机会跑起来呢?目前我们只对 4S 以上机器(有双 CPU)启用这个功能,还是无法保证检测子线程会被调用。
发表评论:
TA的最新馆藏当前位置: &
微信键盘卡住怎么办 iOS9.1/9.2/9.2.1微信BUG解决办法
编辑:Amao
来源:25PP
我们刚刚报道了的情况,那么,当微信键盘卡住的时候该怎么办呢?下面25PP小编为你带来iOS9.1/9.2/9.2.1系统下出现微信BUG的解决办法。方法一:1、使用Touch ID解锁或在透明键盘上切换到数字键盘,输入解锁密码对iPhone进行解锁;2、打开任意一个可以编辑文本的应用如信息、备忘录等,点击编辑文本,这时会出现默认键盘将透明键盘替换掉,这样iPhone就可以恢复正常了。方法二:1、在锁屏界面出现透明键盘时,按电源键锁屏,然后再点亮屏幕,向右滑进入解锁界面,透明键盘就会自动消失了。如果你是按Home键点亮屏幕的话,很容易直接用Touch ID解锁iPhone,这时只要参照方法一进行操作即可;不过小编还是建议你按压电源键点亮屏幕,因为这样能更快的解决微信键盘卡住的问题。掌握了iOS9.1/9.2/9.2.1微信BUG解决办法之后,你也可以把这个小小的BUG当成整蛊小伙伴的一个妙招,只要他/她的微信是6.3.9版本,并且系统是iOS9.1/9.2/9.2.1中的任意一个,你就可以偷偷的给他/她发送一条微信信息,然后在他还没来得及解锁查看的时候先点击快捷回复,接着点击通知栏出现的微信信息,就能让他/她的手机出现键盘卡住的情况。怎么样,这条整人的妙招还不错吧!不过,整蛊也请把握尺度哦。
【上一篇】
【下一篇】
推荐阅读:
看完这篇文章有何感觉?
苹果应用推荐
PP助手准备为您下载应用
未越狱版:鳄鱼小顽皮爱洗澡
如果在10秒后下载任务还没有开始,请下载并安装:
下载步骤如下:选择分类频道
升级iOS 10后微信变得很卡?这样可以解决
并读君点评
: 小技巧get到了没?
许多朋友在手机升级到 iOS 10 以后,发现微信变得很卡。之前少数派在微信技巧汇总文中有介绍过「修复微信故障」的方法,在这里我们也可以借助微信内置的故障修复功能,在一定程度上解决微信卡顿的问题。
首先在微信首页右上角加号菜单中选择「添加朋友」,在「微信号/手机号」输入框中输入:recover,便可以进入微信提供的隐藏功能「故障修复」。
然后选择第一个「微信消息与通讯录」,点击即开始修复,修复完重启微信你会发现卡顿的情况就减轻了许多,但是想要微信真正在 iOS 10 上流畅运行,就要等待微信下次对 iOS 10 系统的适配更新,届时通知栏快速回复等功能也都会回来。
当然,微信「故障修复」中也提供了许多不同的修复选项,当你在使用微信的过程中哪里出现了问题,可以进入「故障修复」中选择对应的修复功能。目前,可以进行聊天记录、收藏信息、朋友圈故障、漂流瓶故障等各种功能和数据库的修复。
有人反映在使用了「故障修复」后发现自己的表情包丢失不见了,其实不用担心,在不久前微信更新中提供了自定义表情同步的功能。如果你发现自己在使用「故障修复」后表情包不见了,只需要耐心等待它们同步到本机就好了。
扫一扫立即下载并读当前位置:
&&&升级iOS10微信卡怎么办?iOS10微信卡顿是怎么回事?
升级iOS10微信卡怎么办?iOS10微信卡顿是怎么回事?
不好朋友反映升级到iOS10之后出现了各种问题,iOS10微信卡顿?升级iOS10微信卡怎么办?让小编来告诉你吧!
iOS10微信卡顿?
iOS10微信卡顿、闪退主要是微信软件没有对新的iOS系统iOS系统进行优化过,刚开始优化的不够好,过一段时间就好了,大家也可以清理一下微信缓存清理:
打开&微信&我&通用&清理微信存储空间&,然后就可以将微信上的缓存文件都清理掉了。
苹果官方在2016WWDC大会上公布了iOS10系统。此次iOS10系统包含了许多新功能亮点,如:更加实用的siri、全新面孔的...
以上就是升级iOS10微信卡怎么办?iOS10微信卡顿是怎么回事?的全部内容,希望可以帮助到大家,想要了解更多精彩内容请查看亿智蘑菇系统栏目。
Ta的热门文章
189人申请VINCI智能头机
1086人申请猫王小王子OTR音箱
2609人申请美利奴羊毛衫
3160人申请熊大大·X能源移动电源
5026人申请新路由3
¥249熊大大: 石墨烯快充充电宝 自带充电头
¥79【EBER】EBER H3mini智能体脂秤:解析身体的秘密
¥1999【小吉】小吉迷你滚筒洗衣机:小身材 大讲究
¥3199【大朋VR】大朋VR一体机M2 Pro:让想象触手可及
¥228【空气净化灯】聪明一休空气净化灯:不光能照明,净化能力也够牛!
你还可以分享到以下地方,获得10蘑菇参与!
免费试用:
微信添加"亿智蘑菇"获取我们的服务
微博添加"亿智蘑菇"获取我们的服务
下次自动登录
使用第三方登录}

我要回帖

更多关于 打字卡顿怎么回事 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信