经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
[Android systrace系列] systrace最实用一招
来源:cnblogs  作者:zzc1024  时间:2020/12/8 8:45:20  对本文有异议

systrace最吸引人的地方,在于当你不了解所有业务逻辑时,依然可以通过线程间的阻塞关系,快速定位问题。

有了这篇文章的铺垫,后续的文章再开始分享技巧。

----------------------------------------------------------------------------------------------

这篇文章的小目标:学会分析线程间的阻塞关系

-----------------------------------------------------------------

 

之前,我们通过[Android systrace系列] systrace入门第一式学会了下面这些:

放大缩小视图

CPU各个核在各个时间点运行的线程

流程之间的从属关系,以及各流程的耗时

线程的运行状态(就绪,运行中,睡眠等等)

 

在介绍最实用一招前,描述一下我对性能问题的粗浅理解。

我们可以将发生性能问题的部件划分为三类:

1)计算单元,例如CPU和GPU等

2)存储单元,例如闪存、硬盘和内存等

3)以上两者的连接部分,例如总线、网络等等。

问题的类型,也可以分为两种:能力不足以满足 和 能力无法有效发挥。

这两个方面交织起来,就有6种情况,举几个例子,

对于CPU,运算量太大导致运行时间长是属于前一种,而代码逻辑导致进程阻塞是后一种。

对于内存,内存申请量大,导致需要回收内存属于前一种,而剩余内存够,但分配算法不良导致碎片过多,没有足够的连续可分配空间则属于后一种。

 

性能分析中进程相关的部分,学会这一招可以解决不少问题。

阅读完下面的文章,你能体会到,A线程唤醒B线程,意味着A线程阻塞了B线程,B线程等待了A线程。

通过不断回溯被唤醒的顺序,基本能找到阻塞问题的源头。

讲述这一招的操作,我最喜欢的文章:

https://www.androidperformance.com/2019/07/23/Android-Systrace-Pre/

翻译腔官方文档:

https://developer.android.google.cn/topic/performance/vitals/render

官方文档的网友翻译:

https://zhuanlan.zhihu.com/p/27065828

有了以上优秀的文章,我欣喜而又遗憾地,将操作的讲述省略了。

在这些文章中付出耐心,十分值得,因为技能树马上就能点亮了。

 

能够无视千万行代码逻辑,通过线程阻塞关系,定位问题的感觉,太好了。

毕竟有时定位完问题,就可以转bug了^^

 

 

转载请注明出处:https://www.cnblogs.com/zzcperf/p/13992164.html

 

原文链接:http://www.cnblogs.com/zzcperf/p/13992164.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号