美文网首页
iOS13卡顿问题分析(一)CPU on instruments

iOS13卡顿问题分析(一)CPU on instruments

作者: 宋奕Ekis | 来源:发表于2020-12-21 09:40 被阅读0次

在卡顿数据里,iOS13退到后台占了50%左右。这个特定场景让我们困扰了很久,使用instruments分析了工程在退到后台时CPU的变化情况。并得出以下结论:

  1. 退到后台一瞬间CPU占用率升高,同时产生的操作太多

  2. 主线程占用比例大

  3. 过多的线程

  4. 神策,SDWebimage,TD,ADJust等使用了backgroundTask,十分消耗资源

  5. 并且在backgroundTask中进行了大量耗时操作

  6. JPush直接创建了一个Runloop在运行,长期持有系统资源,并且在退到后台时进行文件写入

针对上面的4,5我们可以比较容易触达到,所以制定以下策略:

  1. 首先尝试拦截backgroundTask,并根据其ID,进行分时处理

  2. 如果不行,尝试单独hook每个SDK的方法,进行分时处理

具体分析过程如下,测试机型,iPhone7 iOS13.3.1。

国内的工程在退到后台之后,我们可以看到,CPU的峰值一下飙升到了90%。
Image

从图中可以看出来,主要有两个高柱,我们分别来看,其中究竟做了什么。

Image

在第一个高柱中,占用CPU峰值为40%。从堆栈中可以看出,JPush占比47.8%,其中它生成了一个新的Runloop在不断运行它的的业务,其中退到后台的操作主要为给缓存写入数据。

还有两个线程分别为21.7%(bugly),21.7%(微信),主线程占比8.6。

从这里可以看出,其中JPush在退到后台的瞬间对CPU使用率影响巨大。

Image

在第二个高柱中,可以看到CPU使用率峰值达到了90%,其中主线程占比65%,而其中神策为10%,SDWebimage为5%,还有一部分无法解析。

而除了主线程,还有4个子线程,分别为:

  1. 神策上报线程,占比15%

  2. 微信,占比10%

  3. 环信5%

  4. SDWebimage清理缓存线程,5%。

我们再深入一步:

Image

其中波峰90%的消耗中,主线程占比28.5%。

  1. 神策上报线程,28.5%

  2. 微信28.5%

  3. SDWebimage清理缓存线程14.2%

在上述中可以得到结论,在APP退到后台时,CPU产生两次波动。

  1. JPush进行缓存写入。开辟新的Runloop

  2. 神策进行上报。使用后台backgroundTask,并进行了子线程处理

  3. SDWebimage清理缓存。使用后台backgroundTask,并进行了子线程处理

  4. 微信和环信做了些不知名的操作

我们反过来再进行操作,在不对神策,JPush进行初始化时的CPU变化:

Image

可以看出,CPU使用率略微平稳了一些,并且主线程占比也减少到了34%,其中第二段,可以看出,这次是TD上报,同样是使用了backgroundTask,并且还是在主线程使用。

接下来,我们继续屏蔽TD

Image

可以看出来,主线程只剩下SDWebimage,而且CPU使用率平稳了很多。

海外工程表现类似,我们来看一下具体的:
Image

从分析中可以看出,CPU峰值为100%,并且分布细密。

从具体堆栈中可以看出,相比于H2,H2O的情况更加恶劣一些。

首先,除了退到后台一瞬间CPU使用增高之外,在正常的使用过程中,CPU也一直由FacebookSDK,SDAutoLayout,GAD等占据着。

其中,如下图,Facebook不断的在hook并收集网络信息

Image

SDAutoLayout在跑着,重新布局View。

GAD也在不断的在内存中写入数据,具体写的什么不得而知。

而这些问题,都是因为我们循环轮播的Banner,所以最近一步棋,优先使轮播Banner在页面离开,App退到后台等场景停止工作,解决平时CPU持续占用问题。

而在退到后台一瞬间:

  1. Facebook在进行资源回收

  2. SDAutoLayout在重新布局View

  3. 神策在上报数据

  4. SDWebimage在清理旧图片

  5. JPush在进行文件IO

  6. ADJust也在进行IO操作

其中Facebook,ADJush,JPush在退到后台一瞬间,是CPU使用率达到了70%。不到1s后,神策和SDAutoLayout使CPU使用率达到了100%。

从以上可以看出,我们再退到后台时,由于自身代码边界条件不清楚,三方SDK滥用,导致了CPU使用率集中过高。需要好好治理。

相关文章

网友评论

      本文标题:iOS13卡顿问题分析(一)CPU on instruments

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