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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/229051.html
標籤:其他
