背景
我的App怎么这么卡,谁在代码里下毒了!
有一天突然发现debug包运行变的特别卡顿,经过下面的简单测试发现debug包在Android 14上出了问题。
二
问题排查纪录
常规手段排查
使用了systrace以及内部的debug包 trace工具dutrace进行排查。
结论:CPU空闲,主线程无明显阻塞,看上去就是纯方法执行耗时。
发现怀疑点
第一步排查过程中没有特别大的收获,但是我用dutrace工具排查时发现了一个异常现象。这里简单介绍一下dutrace的实现原理:
dutrace是利用inline hook在artmethod的执行前后加上atrace的点再通过perfetto ui工具展示。有以下优点:
1. 支持线下分析函数执行流程,函数耗时。
2. 在分析函数调用流程下:
a. 可以查看整个过程的函数调用(包括framework函数);
b. 能够指定监控的函数和线程有效过滤无用trace;
c. 动态配置不需要重新打包。
3. 可使用现成的UI分析工具,有系统关键线程的函数调用,例如渲染耗时、线程锁,GC 耗时等,还有 I/O 操作、CPU 负载等事件。
流程图
在对artmethod执行前后进行hook时 这里涉及到处理art方法解释执行的三种情况。
ART Runtime 解释器
The C++ interpreter,也就是传统的基于switch结构的解释器。一般仅在调试环境、方法跟踪、指令不支持或者在字节码发生异常情况下(例如failed structured-locking verification)才走该分支。The mterp fast interpreter,核心是引入了handler table做指令映射,并通过手写汇编以实现指令间的快速切换,提高了解释器性能。Nterp是Mterp的再次优化。Nterp省去了managed code stacks的维护,采用了和Native方法一样的栈帧结构,并且译码和翻译执行全程都由汇编代码实现,进一步拉进解释器和compiled code的性能差距。在这边我发现了一个异常现象,就是Android 14的解释执行居然都用的switch解释执行方式。我又重新去测试了几个Android 版本的解释执行方式。Android 12走的mterp,Android 13走的是nterp,当进行调试的时候才会走到switch, 理论上Android 14应该也走nterp才对,怎么会走了最慢的switch呢。以下按顺序是12、13、14版本的方法执行backtrace。
排查怀疑点
开始怀疑是解释执行导致的卡顿了,翻了下源码 art/runtime/interpreter/mterp/nterp.cc 中确实有变动 如果是javaDebuggable 就不走nterp了。接下来尝试去证明是是这个问题导致的。
isJavaDebuggable 是runtime.cc中的 RuntimeDebugState runtime_debug_state_ 中控制的。我们可以找到runtime的实例然后通过偏移量修改过runtime_debug_state_属性,看了下源码还可以通过_ZN3art7Runtime20SetRuntimeDebugStateENS0_17RuntimeDebugStateE 进行设置。
四
最后
最近在社区上也看到了高通工程师的一篇文章,他在我定位到的问题的基础上做了更详细的分析。确认了Google会在Android 15上修复这个问题,如果是海外版本的Android 14设备,Google计划通过com.android.artapex模块的更新来修复这个问题。但是国内由于网络的问题,Google的推送无法工作,因此需要各个手机厂家来主动合入这两笔改动。[1]
如果大家需要临时解决debugable包的卡顿的问题也可以通过上述方式解决。
参考文章:
[1] https://juejin.cn/post/7353106089296789556
作者:乌柚
来源-微信公众号:得物技术
出处:https://mp.weixin.qq.com/s/qVaQKa90QiKIQg8XRATUTA
相关资讯
图片来自:https://unsplash.com在 Android 应用开发过程中,我们会将一些耗时任务放在子线程进行处理,从而避免出现主线程卡顿的情况。但是不可避免的,依然会出...
2024-01-31 13:53
各位,南星在此。我们都知道,在王者荣耀的世界里,皮肤不仅能够加分你的英雄形象,更是玩家身份和品味的象征。今天咱们就来聊一聊,那些出现在个人主页上令人眼前一亮的皮肤。它们往往代表了玩...
2024-04-23 12:25
我喜欢次旗舰手机,因为性价比高,有旗舰的体验,也不贵,不仅日常使用流畅,打游戏那些也不卡顿。三年时间,买了2部次旗舰机型,用着挺好的,比上不足,比下有余,要的就是那种感觉。其实,我...
2024-06-02 13:34
所谓的卡顿,就是指 APP的开机、转换、运行、平滑、平滑、平滑、刷新等等。从使用者的角度来看,可以概括为:手感好,手感好。梳理了一下两个体系之间的“爱恨史”,可以看出 Androi...
2024-06-17 16:31
云顶s12美测服PBE打不开 卡顿 黑屏怎么办 有效解决方法来了云顶s12美测服PBE打不开/卡顿/黑屏怎么办 有效解决方法来了在云顶之弈的忠实玩家群体中,PBE(Public B...
2024-07-15 23:34
热闹非凡的战场,香肠们准备好了吗?在《香肠派对》的刺激战场上,想要脱颖而出,一份给力的礼包无疑是如虎添翼! 今天,我们就为你送上2023年最新的香肠派对兑换码大集合,助你在游戏中畅...
2024-06-25 16:28
亲爱的生肖牛朋友们,你们是否曾经感受到工作忙碌,生活压力大,但是总感觉财运却停滞不前?不用担心,让我告诉你一个惊喜的消息——未来五天必做的一件事。它可能就是你改变财运,实现飞黄腾达...
2024-03-21 18:28
文 | 优美撸猫作家编辑 | 优美撸猫作家想拥有让人羡慕的好运气?那就从关注我开始吧!点赞关注,让你财运亨通,福气满满!“愚人众”的执行官们,一直是提瓦特大陆上备受瞩目的存在,他们...
2024-09-14 16:21
今天心情郁闷至极,实在忍不住要来吐槽一下。一年前,我心血来潮,在网上购买了一款价格便宜的国产安卓手机。当时看到广告上炫耀的配置和功能,觉得真是物超所值。然而,现在我深深地后悔了。 ...
2024-01-14 12:44
修道是一款水墨式画风的修仙手游,在游戏中玩家可以通过开器来获得装备。还拥有各种有趣的冒险副本、挑战关卡以及仙门玩法,再加上有趣的法宝、神器以及可爱的灵妖,让你开启一场沉浸式的修真之...
2024-03-13 21:08
热门资讯
MORE+热门游戏
MORE+80.92MB
167.17MB
9.68MB
93.05MB
37MB
156.84MB
55.12M
16.30M
144.34MB
84.47MB