[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

相關文章
相關標籤/搜索