安卓性能分析

昨天听了王老师的直播课,深有感触啊,在此给大家分享一下

1.在直播中王老师已camera出图慢为例展开进行描述的,首先,既然出图慢,那我们采用工具systrace进行监控下camera启动的过程,看一下他到底是在干啥,通过systrace发现,对应的进程长时间处于runable状态,这个状态就是说我camer已经准备好工作了,等着cpu调度然后运行,但这个等待时间过长,导致肉眼能看到出图慢,因此我记继续通过systrace查看下cpu到底在干啥,通过systrace发现cpu调起了kswapd,说明内存确实不够了,需要通过内存回收和kswapd机制来增加可用内存。

2.通过上面1中的分析,发现是内存导致的,内存信息可以通过命令dumpsys meminfo 对应的pid进行查询,在此我们可以对比启动前后的内存,直播中的案例启动前后PSS内存相差大概1G

3.此时我们就在想,到底是谁申请这么多内存,内存有没有优化的方案,王老师介绍了他常实用的工具,adeb,这个工具其实就是咋安卓系统中,构建一个命令行的debian系统,这个系统集成了perf bpftrace,bcc等很多通用的内核分析工具,(这类工具非常有必要了解啊,只是工具不是王老师直播的重要,因此老师就没有介绍),当我们安卓上集成这个环境后,在pc端就可以执行命令adeb shell从而和手机进行连接调试

4.当环境准备好后,我们就可以采用perf进一步进行问题的定位了,其对应命令如下:
   
  通过上面的命令,我们可以获取到对应的堆栈信息,直播中的案例,很明显的看到调用了shrink_node,说明确实是慢速调用,且通过堆栈,我们能看到对应的应用业务调用接口,此时我们就可以采用两种方式处理问题,向上考虑业务上为什么要那么多内存,是不是实际用不了那么多,或者规避来处理,向下就是从内核内存的角度考虑如何能加快内存的申请

5.对于内存,其模型大概是:内存存量 + 内存回收速度 * t >= 内存的申请速度 * t,只要能保证这个模型,那问题就不大了,但若无法保证,那一定会因为内存不够而引起延时,从这个等式看,内存的优化就是三个方面,分别是增加存量,加快回收速率,降低实用速率

6.当我们按照4和5中的方向,优化内存后,就可以测试,看是否还存在出图延时问题,在直播中,王老师通过代码,来量化了优化指标,只是这个代码我没有,无法给大家展示

希望上面的内容对大家会有帮助啊
 


#安卓工程师##安卓开发#
全部评论
楼主厉害,至少指明了一种分析思路
点赞 回复 分享
发布于 2022-08-21 17:50 陕西
能搞性能的都是大神啊
点赞 回复 分享
发布于 2022-08-21 15:28 陕西

相关推荐

04-27 08:59
常州大学 Java
牛客139242382号:《两门以上汇编语言》
点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
评论
4
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务