Android 卡慢監控組件簡介

1. 功能簡介:

? Android卡慢監控組件,用于監控app在整個使用過程中出現的界面卡頓現象,嘗試還原其中的調用堆棧信息,追蹤代碼來源;
? 以堆棧信息的形式體現出來,附加了CPU使用率做參考;
? 上報到統計平臺,進行聚合排名 。

2. 監控原理:

第一步:

? 利用Looper.getMainLooper().setMessageLogging() 接口;
? Looper源碼如下:

重載println方法 ,可以統計出dispatchMessage的執行耗時情況。

第二步:

使用子線程定期抓取主線程的堆棧調用(圖片中展示了3個消息執行,子線程產生了5次調用堆棧的抓取)。

第三步:

主線程消息執行耗時長的情況發生時,關聯出該時間段的主線程調用堆棧信息。

從上圖可以看出:

1. CPU的信息采集,包括的整個手機的CPU使用率,和自身app的使用率,用于鑒別是否發生其它app搶占CPU使用的情況。

2. T1和T2細分為線程時間和真實時間,用于鑒別是否該線程真的執行慢,還是該線程得不到CPU執行,被其它線程搶占。

3. 查看每次采集的時間點,是否發生過自身監控線程也卡住的情況。

第四步:

上報關聯出的堆棧信息,匯總到后臺進行信息聚合和top排名,上報的樣本越多,top排名的真實度越高,越能反映出用戶的真實卡慢情況;在上報用戶非常大的情況下,一次3秒耗時的消息被監控到的上報數量,理論上是1秒耗時的消息的上報數量的3倍,耗時越長,數量越排前。

3. 監控策略:

? 開發階段自動化測試;
? 灰度用戶全部監控;
? 正式版本小范圍監控,下發開關控制。

4. 統計平臺信息展示:

包含時間,堆棧的第一行聚合,版本,次數,用戶量等基本信息:

5. 卡慢問題分析和解決:

問題主要集中在以下幾塊:

? 主線程進行文件I/O讀寫
– Sharepreference
– SQL操作
– File(image/config)
? 同步鎖等待
? 布局太復雜, 加載過慢
? 算法邏輯執行太慢
? 跨進程等待
? 程序之外的其它卡慢因素影響
– 子進程搶占CPU和I/O
– 其它app搶占CPU和I/O

解決辦法:

? 降低I/O次數,異步寫,讀取看情況異步
? 內存操作鎖和文件操作鎖分開
? 布局拆分,分段加載
? 重構邏輯/算法
? 異步化線程處理
? 避免重復獲取,做好內存緩存

6. 組件的缺陷:

? 單個用戶的定位不太精確;

? 單次監控觸發的堆棧采集, 可能不是真實的問題所在,依賴后臺的信息聚合;

? 但如果一次卡慢關聯到2次堆棧信息(消息執行的時間是堆棧采集間隔的2倍以上),并且堆棧一致,就可以定位到該處堆棧是問題所在;

? 監控本身存在一定的性能消耗;

? 獲取堆棧調用情況,獲取CPU使用率,時間打印等,監控組件需要消耗5%以上CPU資源,視監控間隔而定,間隔越短,CPU使用率越高。

7. 總結:

該組件是一個巧妙利用卡慢時間關聯出抓取堆棧,并由后臺進行聚合的概率統計手法,問題以調用堆棧的信息展示,也是最快的定位手段。組件剛投入項目中就顯著的發現大量問題,并有效解決,收益高。公司內產品:QQ音樂、全民K歌、天天P圖、畫報、企鵝電競,已接入該監控組件,顯著優化了界面卡慢問題。

 

來自:http://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=2649796870&idx=1&sn=fd911850e32dd955316664c8c4104946&chksm=f1fcc55ec68b4c4865fd7466cc21f5e0b72080a034757613678cd011162858561310513834af&scene=0

 

 本文由用戶 openhomelover 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!