iOS异常流量消耗及大范围应用闪退问题的分析

Frank发布

索引
[隐藏]

Click here for English version/点击这里前往英文版

这是我遇见的第三个Apple设备上的疑难杂症。

大概是今年的6月底,我的iPhone(运行iOS11.4)一夜之间跑掉了将近10个G流量。经检查Shadowrocket日志发现,iPhone在以约200kb/s的速度持续从 gateway.icloud.com下载不明数据。(根据其他受害者反映,如果没有安装Surge一类的软件,这些不明流量会在流量统计中显示为“文稿与同步”)我原来的iCloud使用的是日区账号,换成国区账号之后好了一段时间(一天多一点)之后,问题再次出现。由于我当时正被考试周搞得焦头烂额,将 gateway.icloud.comReject掉之后就没有再管他,也不影响日常使用。

之后查找相关资料发现,也有网友遇到类似问题(22楼):https://www.v2ex.com/t/459452。但是他提出的登出macOS设备上的iCloud的方案,我试了之后并没有成功。

但是事情并没有结束,从那之后没多久,我的iPhone和iPad都出现了时不时发生应用大面积闪退的问题,频率基本维持在一周2-3次。当问题发生时,点开大多数应用都会卡在Splash Screen大约10秒后闪退。会闪退的应用包括但不限于知乎,TIM,Notability及所有Google应用。微信和苹果自带应用基本不受影响。此时手机会发热,并且进入iCloud界面时大概率会卡死。出现问题时我的iPhone运行的iOS版本为11.4,后来升级至iOS 12 Public Beta后问题依然存在。

尝试

我尝试了重启,强行重启,重新安装出现问题的应用,升级iOS及登出并重新登录iCloud,均没有效果。临时的处理方法是关闭并打开iCloud Drive开关,有一定几率暂时修复这个问题。但是此时进入iCloud界面有大概率会卡死,所以需要多试几次才行。(事后证实这个问题与iCloud Drive无关,可能只是巧合)如果不进行任何处理,一段时间以后也会自行恢复。

分析

由于这个问题十分隐蔽,导致每个人的描述都不太一样,因而很难在网上搜索到。我整理了所有出现类似问题的贴子合集:
https://www.v2ex.com/t/460089
https://www.v2ex.com/t/471491
https://cn0xroot.com/2018/07/17/2018-07-16/
https://www.v2ex.com/t/459452
https://discussionschinese.apple.com/thread/140132632
https://www.reddit.com/r/jailbreak/comments/8sf4u3/help_this_block_of_text_is_being_spammed_in_my/
https://forums.developer.apple.com/thread/105722
https://forums.macrumors.com/threads/excessive-data-consumption-for-documents-sync-and-constantly-high-cpu-load-on-iphone-and-ipad.2127349/

这个问题出现的时间很随机,我目前还没有找到其触发条件,难以手动复现。我初步定位问题与iCloud有关。至于此前曾经出现过的iCloud持续下载数据问题,我猜测两者之间也有关联。

检查Console发现,在应用启动并闪退时,会出现 Provision violated for watchdog scene-create信息。经搜索得知,这个报错是由于应用启动时间过长而被系统强行杀死。

与此同时,当问题出现期间,会出现大量下列日志,每秒钟多达数十条。(日志很长,请向右滑)

通过日志中的 com.apple.ProtectedCloudStorage字样,初步锁定问题出现在Keychain。至于其中出现的 Manatee,经查找并没有查询到有价值的信息。

我通过搜索日志中的内容查到了Reddit上面的一个帖子: https://www.reddit.com/r/jailbreak/comments/8sf4u3/help_this_block_of_text_is_being_spammed_in_my/。这位楼主nhcoil和我遇到了几乎一样的问题。我发送私信询问后得到了如下的回复:

Never found the solution. Brought my phone in multiple times and nothing, even got a replacement device and the issue persisted. The problem was something in my iCloud. I don’t know what, didn’t have anything in there at all.
Holy solution was creating a new iCloud account and not carrying anything over and manually putting everything like contacts etc.
I’m sorry I can’t be much help, I spoke with Apple live chat about the issue and gave everything I could to isolate and help with the problem.
If you do find a solution other than a new iCloud account, then that’s amazing but for now I think that’s all that can be done.
Regards,
Micheal

研究上述日志和nhcoil提供的信息,猜测该问题的起因在于iCloud中的数据出现了某些问题,导致预料之外的同步出错,并且问题大概率出现在Keychain中。

接着,我又搜索到了这篇帖子https://forums.developer.apple.com/thread/105722。文中提供了更多的信息:

This process will continue writing around 30000 lines to the database, and during this time, secd uses 100%+ of a CPU. Once that’s finished, I can manually edit the database using an Sqlite editor, which brings the database down to around 10-15MB, and Safari passwords will resume working. Eventually the database will grow again and Keychain stops working.

Signing all devices out of iCloud Keychain does not clear this problem. Computers running 10.11.6 and 10.12.6 work normally, so the problem seems to stem from some new feature in iOS 11 and macOS 10.13.

我前往MacBook上的本地Keychain数据库,果然发现了大量含有 Manatee的数据,多达上万行,并且,这些数据不会显示在Keychain Access中。
我相信在我的iCloud Keychain中同样存在这些数据,但是我没有任何途经去查看或删除它。

继续搜索,我又找到了MacRumors上的一个帖子:https://forums.macrumors.com/threads/excessive-data-consumption-for-documents-sync-and-constantly-high-cpu-load-on-iphone-and-ipad.2127349/。通过文中提供的信息,我们足以确定问题确实出在Keychain中。
并且,这两篇文中都提到,当双重认证关闭时,问题就不会再发生,可以视为一个相对可行的解决方案。

解决方案

方案1:重置CloudKit

该方案被部分网友确认有效

评论区的网友XXL指出这个链接中有了新的解决方案,其中22楼提供了几条用于重置CloudKit的命令。这些命令只有在开启双重认证时才有效,请在操作前确保双重认证是开启状态。虽然理论上数据不会丢失,但是保险起见请提前备份健康和Keychain数据。

首先在macOS设备上登录你的存在问题的iCloud账户,检查 ~/Library/Keychains/(UUID)/keychain-2.db的大小,这时其大小可能在数百M甚至大于1G。

确认CloudKit的登录状态。

如果其中每个View的CloudKit状态为logged in则继续。如果是logged out,可能是双重认证未开启造成的。

如果你的CloudKit状态为logged out,下文命令虽然可以执行成功,但是不会有任何效果。

从iCloud同步最新的数据。这个命令可能执行不成功,但是没有关系。

重置本地数据库

重置iCloud数据库

完成后在macOS设备上登出并重新登录该iCloud账户。此时如果 ~/Library/Keychains/(UUID)/keychain-2.db的大小变为10M左右,说明成功。之后的一段时间请持续观察闪退现象是否复现及keychain-2.db的大小是否有明显增加。

方案2:关闭双重认证

该方案确认有效,但是有特定适用范围。

从AppleID网页管理界面关闭iCloud账户的双重认证即可。请注意是双重认证(Two-factor Authentication)而不是两步验证(Two-step Verification)。

但是,在 iOS 10.3 或 macOS 10.12.4 及更高版本中创建的AppleID无法关闭双重认证。如果你在上述系统版本下开启了双重认证,在开启之后的两周内可以通过确认邮件中的链接关闭双重认证,超过两周则无法关闭。

其他解决方案

如果上述方案对你无效,你可以参考下面的方案来进行尝试:

以下方案确认有效,但是操作相对麻烦或会影响日常使用

  • 创建一个全新的iCloud账户,并手动迁移旧账户中的数据
  • 从iOS设备上登出iCloud账户

以下尝试已经被我或遇到相同问题的网友证实无效

  • 登出并重新登录iCloud账户
  • 将macOS设备登出iCloud账户
  • 清空iOS设备上的Safari密码
  • 使用类似Surge的网络调试工具Reject掉形如 p**-*.icloud.com的网址,以阻止iCloud进行同步。
  • 关闭iOS设备上的iCloud Keychain
  • 从macOS设备的Keychain Access中重置Keychain数据库

参考资料

分类: 原创文章

39 条评论

XXL · 2018 年 10 月 14 日 下午 5:56

Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Mac OS X  10.14.0 Mac OS X 10.14.0

经过两天的观察,我这边已经正常,就是用了https://forums.macrumors.com/threads/excessive-data-consumption-for-documents-sync-and-constantly-high-cpu-load-on-iphone-and-ipad.2127349/ 最后提到的方法,/usr/sbin/ckksctl reset-cloudkit 还有 /usr/sbin/ckksctl reset 我都跑了,最后再重登一下Mac和iOS 上的iCloud,查看~/Library/Keychains/内很长文件夹下的keychain-2.db文件,10M左右不是四五百或者一两个G,就正常了,如果不行,就多试几次,出错了,就继续

    Frank  Mod · 2018 年 10 月 14 日 下午 6:44

    Google Chrome 71.0.3573.0 Google Chrome 71.0.3573.0 Mac OS X  10.14.0 Mac OS X 10.14.0

    谢谢,我也尝试一下。

    Frank  Mod · 2018 年 10 月 16 日 下午 11:37

    Google Chrome 71.0.3573.0 Google Chrome 71.0.3573.0 Mac OS X  10.14.0 Mac OS X 10.14.0

    我这两天把双重认证打开试了一下,我执行完那两个命令之后keychain-2.db的大小确实减小了,但是是从400多M减小到200多M。正常使用一段时间之后,iOS设备上又会出现闪退问题,然后db文件又会增大。

    loopback · 2018 年 10 月 17 日 下午 10:58

    Firefox 62.0 Firefox 62.0 Windows 10 x64 Edition Windows 10 x64 Edition

    reset-cloudkit是reset云端的,reset是reset本机的吧,这样岂不是把云端的先干掉,然后又干掉本地的,keychain就丢完了哟

      loopback · 2018 年 10 月 18 日 下午 4:36

      Safari 12.0 Safari 12.0 Mac OS X  10.13.6 Mac OS X 10.13.6

      测试了一下,没有问题,内容都在,文件大小也减少到了10M以内,继续观察一下,如果没有跑流量及闪退就行。

        Frank  Mod · 2018 年 10 月 18 日 下午 11:30

        Chrome 70.0.3538.60 Chrome 70.0.3538.60 iPhone iOS 12.1 iPhone iOS 12.1

        解决了就好。不过这个方法似乎对我不管用,我有空再研究下。

XXL · 2018 年 10 月 13 日 下午 3:12

Safari 12.0 Safari 12.0 iPhone iOS 12.0.1 iPhone iOS 12.0.1

https://forums.macrumors.com/threads/excessive-data-consumption-for-documents-sync-and-constantly-high-cpu-load-on-iphone-and-ipad.2127349/

这个网站有了新回复,貌似有解决办法,我准备尝试下他的命令,如果成功了,就来反馈下
先说下我昨晚试的,我设备的系统是iOS12、macOS 10.14,都是正式版,我先重置了Mac上的钥匙串,之后Mac iOS全部退出美区ID重新登录,之后iPhone上开始每秒200-400kb同步数据,iOS12应用不闪退了,有点像iOS11,我一度以为问题解决了,只要不闪退,跑数据就跑吧,蜂窝下还能关闭,然而第二天早上,数据不跑了,又开始闪退了,有点啰嗦了.

一名大神 · 2018 年 10 月 8 日 下午 4:32

Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Mac OS X  10.14.0 Mac OS X 10.14.0

😖

loopback · 2018 年 8 月 11 日 下午 10:59

Firefox 61.0 Firefox 61.0 Windows 10 x64 Edition Windows 10 x64 Edition

我也遇到了类似的问题,而且是毫无征兆没有做任何特殊操作的情况下突然就发生了,楼主总结的无效方案也都试过,结果也是无效。联系apple,各种收集log至今也无解决方案。通过抓包,发现每隔5-6分钟就从apple的一个IP地址上下载数据,大概每次25-30M。由于数据ssl加密,所以无法解码。我的分析与楼主类似,也是怀疑iCloud上的文件有什么碎片或者什么hash不一致,造成反复尝试下载。
不知楼主是否解决问题了,是否需要重置KeyChain和关闭双重验证要同时进行才能解决问题呢?

    Frank  Mod · 2018 年 8 月 11 日 下午 11:02

    Google Chrome 70.0.3514.2 Google Chrome 70.0.3514.2 Mac OS X  10.13.6 Mac OS X 10.13.6

    我关掉了双重验证,目前为止问题没有重现。如果你有Mac设备,可以尝试重置Keychain。

      loopback · 2018 年 8 月 12 日 下午 4:44

      Firefox 61.0 Firefox 61.0 Windows 10 x64 Edition Windows 10 x64 Edition

      尝试重置keychain,故障依旧。本打算关掉双重验证,结果登录到iCloud发现根本关闭不了。apple说iOS 10.3以上部分双重验证是无法关闭的。

        Frank  Mod · 2018 年 8 月 12 日 下午 4:48

        Google Chrome 70.0.3514.2 Google Chrome 70.0.3514.2 Mac OS X  10.14.0 Mac OS X 10.14.0

        我是在https://appleid.apple.com/上关掉的。

          loopback · 2018 年 8 月 12 日 下午 4:56

          Firefox 61.0 Firefox 61.0 Windows 10 x64 Edition Windows 10 x64 Edition

          我也是在这里准备关闭,但apple明确说明“对于在 iOS 10.3 或 macOS Sierra 10.12.4 及更高版本中创建的某些帐户,您无法关闭双重认证。”,界面上压根就没有关闭的链接,这下悲催了。

            Frank  Mod · 2018 年 8 月 12 日 下午 5:00

            Google Chrome 70.0.3514.2 Google Chrome 70.0.3514.2 Mac OS X  10.14.0 Mac OS X 10.14.0

            那么可以试试联系Apple支持,看有没有别的方法能关掉双重验证。如果不行的话,就只能新建一个Apple ID了。

              loopback · 2018 年 8 月 12 日 下午 5:02

              Firefox 61.0 Firefox 61.0 Windows 10 x64 Edition Windows 10 x64 Edition

              也只有等Apple解决了,5月份就联系过Apple,前前后后多次电话,始终没有解决问题,看来只有等iOS12试试了。

                Frank  Mod · 2018 年 8 月 12 日 下午 5:04

                Google Chrome 70.0.3514.2 Google Chrome 70.0.3514.2 Mac OS X  10.14.0 Mac OS X 10.14.0

                这个问题在iOS 12 Public Beta3里是仍然存在的,后两个版本我不确定。

                  loopback · 2018 年 8 月 12 日 下午 5:17

                  Firefox 61.0 Firefox 61.0 Windows 10 x64 Edition Windows 10 x64 Edition

                  看来Apple是不打算解决这个问题了。其实网上一搜,这种问题还真不少。
                  我发现好像并不是所有版本的iOS都有这个问题,我现在用的iPhone5,iOS10.3.3就没有这个问题。

                    Frank  Mod · 2018 年 8 月 12 日 下午 5:21

                    Google Chrome 70.0.3514.2 Google Chrome 70.0.3514.2 Mac OS X  10.14.0 Mac OS X 10.14.0

                    上面的帖子里提到 Computers running 10.11.6 and 10.12.6 work normally, so the problem seems to stem from some new feature in iOS 11 and macOS 10.13. 应该是只有iOS11及以上的设备会受影响。
                    这个问题的影响范围似乎比我预想的要大很多。我试着给Apple提反馈,但是Feedback只能提交一小段的说明而且没法附加任何附件。Bug Report又需要有开发者账号。

                    loopback · 2018 年 8 月 12 日 下午 5:28

                    Firefox 61.0 Firefox 61.0 Windows 10 x64 Edition Windows 10 x64 Edition

                    我自打5月份电话联系Apple反映这个问题,就配合Apple远程屏幕、安装描述文件收集log,其实Apple应该有非常详细的日志信息了。当时我自己还抓了网络包的,不过是SSL加密所以我解不了,问Apple是否需要,对方似乎已经有充分的故障信息了,也不需要这个抓包文件。

                    Frank  Mod · 2018 年 8 月 12 日 下午 5:32

                    Google Chrome 70.0.3514.2 Google Chrome 70.0.3514.2 Mac OS X  10.14.0 Mac OS X 10.14.0

                    那就只能用临时方案先撑着然后等更新了。我之前遇到过iOS一个更冷门的bug(https://blog.nyan.im/posts/1890.html),足足等了半年才修复。

                    loopback · 2018 年 8 月 12 日 下午 5:35

                    Firefox 61.0 Firefox 61.0 Windows 10 x64 Edition Windows 10 x64 Edition

                    这bug也够奇葩的了。

                    loopback · 2018 年 8 月 13 日 下午 10:11

                    Safari 11.1.1 Safari 11.1.1 Mac OS X  10.13.5 Mac OS X 10.13.5

                    最终还是通过reject gateway.icloud.com来避免跑流量,目前还未发现闪退情况,但发现reject后备忘录无法同步了。估计备忘录同步需先访问gateway.icloud.com

                    loopback · 2018 年 10 月 12 日 下午 9:36

                    Firefox 62.0 Firefox 62.0 Windows 10 x64 Edition Windows 10 x64 Edition

                    reject一段时间后自己又好了,不用reject也不会跑流量。但好景不长,升级iOS12后陆陆续续出现app闪退,DFU刷机后,基本上非apple的app都闪退。网络上的问题还好reject,闪退基本就只有退出apple id或者用国内id了。不知是否还有其他的解决办法呢?(BTW,双重认证无法关闭)

                  loopback · 2018 年 10 月 12 日 下午 9:39

                  Firefox 62.0 Firefox 62.0 Windows 10 x64 Edition Windows 10 x64 Edition

                  reject后好了一段时间,甚至后来不用reject也不会跑流量了,但好景不长,升级iOS 12后陆续出现app闪退,DFU刷机后,基本非原生app都闪退了。双重认证也无法关闭,看来只有退出apple id或者用国区id了。

                    loopback · 2018 年 10 月 12 日 下午 9:40

                    Firefox 62.0 Firefox 62.0 Windows 10 x64 Edition Windows 10 x64 Edition

                    发重复了。

                    Frank  Mod · 2018 年 10 月 13 日 上午 11:55

                    Chrome 69.0.3497.105 Chrome 69.0.3497.105 iPhone iOS 12.1 iPhone iOS 12.1

                    我目前还没找到有效的方案。如果不行的话,尝试新建一个appleid然后手动迁移数据吧。

                    loopback · 2018 年 10 月 13 日 下午 1:24

                    Firefox 62.0 Firefox 62.0 Windows 10 x64 Edition Windows 10 x64 Edition

                    关闭双重认证也不能解决问题吗?

                    Frank  Mod · 2018 年 10 月 13 日 下午 1:28

                    Chrome 69.0.3497.105 Chrome 69.0.3497.105 iPhone iOS 12.1 iPhone iOS 12.1

                    关闭双重认证可以解决。

                    Frank  Mod · 2018 年 10 月 14 日 下午 6:44

                    Google Chrome 71.0.3573.0 Google Chrome 71.0.3573.0 Mac OS X  10.14.0 Mac OS X 10.14.0

                    你可以尝试一下下面XXL的方案。

Inighty · 2018 年 8 月 10 日 下午 11:28

Google Chrome 67.0.3396.99 Google Chrome 67.0.3396.99 Windows 7 x64 Edition Windows 7 x64 Edition

妈耶 我被这个问题困扰了好几天了! 而且是我换了电池之后出现的 搞的我还找客服说电池的问题!!感谢博主,了解了原因。 我的原因应该也是icloud原因,我用的美区icloud

    Frank  Mod · 2018 年 8 月 10 日 下午 11:40

    Google Chrome 70.0.3514.2 Google Chrome 70.0.3514.2 Mac OS X  10.13.6 Mac OS X 10.13.6

    不客气。我发现出现这个问题的似乎都是外区Apple ID,很诡异。

      Inighty · 2018 年 8 月 11 日 上午 12:42

      Google Chrome 67.0.3396.99 Google Chrome 67.0.3396.99 Windows 7 x64 Edition Windows 7 x64 Edition

      博主 用的什么方法解决的最后 难道只能关闭双重验证么 好像ios12关不了 我关了钥匙串好像还是一样的,确实退出了icloud账号就不发烫了 也不卡了

        Frank  Mod · 2018 年 8 月 11 日 上午 1:54

        Chrome 68.0.3440.83 Chrome 68.0.3440.83 iPhone iOS 12.0 iPhone iOS 12.0

        应该是需要关闭双重验证。双重验证只能从网页上关闭。

dbsquirrel · 2018 年 8 月 9 日 下午 8:47

Google Chrome 68.0.3440.106 Google Chrome 68.0.3440.106 Windows 10 x64 Edition Windows 10 x64 Edition

从apple社区看到了你的回复 感谢
我也有一样的问题
https://www.v2ex.com/t/460089
https://www.v2ex.com/t/471491?p=1#r_5909047
之前ios11 ios12登录美区id时 频繁的卡死和闪退 发热严重
我是退出美区id 之后就完全正常使用了……………………

    Frank  Mod · 2018 年 8 月 9 日 下午 9:08

    Google Chrome 70.0.3514.2 Google Chrome 70.0.3514.2 Mac OS X  10.13.6 Mac OS X 10.13.6

    不客气,解决了就好。

lyphix · 2018 年 8 月 5 日 下午 10:15

Google Chrome 68.0.3440.84 Google Chrome 68.0.3440.84 Windows 10 x64 Edition Windows 10 x64 Edition

印度猴子不靠谱,换回安卓吧

QIYOOO · 2018 年 8 月 4 日 下午 10:09

Safari 10.0 Safari 10.0 iPhone iOS 10.3.2 iPhone iOS 10.3.2

具一位不愿意透露姓名的伪内部人士透露
苹果:我们已经可以检测用户内心的喜爱程度实现对手机系统流畅度的改变。
比如:谷歌粉把苹果自带应用删除,安上谷歌的应用。用苹果想流畅是不可能的,怎么可能不卡,我们也不需要所有人都用苹果。

具体方案:检测苹果自带应用的卸载率,谷歌应用的安装率,以及当用户从心爱的谷歌应用切换到不得不用不能卸载的苹果的自带应用,比如短信电话,前置摄像头会检测用户面部表情的细微变化。从而判断该用户是喜欢苹果还是谷歌。以实现对手机处理器的降频等削弱用户体验的操作。

    Frank  Mod · 2018 年 8 月 4 日 下午 10:11

    Google Chrome 69.0.3493.3 Google Chrome 69.0.3493.3 Mac OS X  10.13.6 Mac OS X 10.13.6

    小学生

      QIYOOO · 2018 年 8 月 4 日 下午 10:13

      Safari 10.0 Safari 10.0 iPhone iOS 10.3.2 iPhone iOS 10.3.2

      你看看
      Google Chrome 后面写的Mac OS

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha *

%d 博主赞过: