[Android systrace系列] systrace最实用一招

systrace最吸引人的地方,在于当你不了解全部业务逻辑时,依然能够经过线程间的阻塞关系,快速定位问题。html

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

----------------------------------------------------------------------------------------------算法

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

-----------------------------------------------------------------性能

 

以前,咱们经过[Android systrace系列] systrace入门第一式学会了下面这些:google

放大缩小视图spa

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

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

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

 

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

咱们能够将发生性能问题的部件划分为三类:

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

相关文章
相关标签/搜索