移動端APM性能監控

    你們好,很高興能和你們分享下關於『移動端APM性能監控』的一些想法和實踐。前端

    首先介紹下我本身,我叫徐宜生,如今是滬江高級Android開發工程師,《Android羣英傳》和《Android羣英傳:神兵利器》的做者,常常在CSDN上發表一些技術文章。這裏是個人微信公衆號,歡迎你們關注。android

    這裏是出版的兩本書,感興趣的朋友能夠看看。算法

    所謂『APM』,就是Application Performance Management的簡稱,咱們利用這個系統來對應用的性能、可靠性進行線上的監控和預警的一種機制。編程

如今App的開發技術相對成熟,而提高App的使用體驗,就成了不一樣App之間的一個競爭點。後端

    那麼APM系統到底有哪些做用呢?服務器


    首先,咱們能夠了解到線上App的實際使用狀況,瞭解到App的奔潰、異常數據,從而針對潛在的風險問題進行預警,並進行相應的處理,例如發佈補丁包、調整服務器策略等等。微信


    另外,瞭解App的真實使用信息,還有助於後端服務器瞭解客戶端使用狀況,根據不一樣的策略進行服務端的架構調整,同時有針對性的提升App使用體驗,提升用戶使用黏性。網絡

    APM其實是一個比較大的工程,這裏咱們主要講解客戶端的實現,但僅僅是客戶端的實現,就已經包含了不少咱們須要去解決的問題,例如:混合編程對性能數據採集的影響,採集程序對宿主App的性能影響、侵入程度、可拓展性和可定製性等等,同時Android的碎片化和iOS的一些封閉性,形成了不一樣設備、不一樣平臺上的數據採集有不少的問題。架構


    另外,APM系統對後端的要求也比較高,例如:數據的採集彙總,分析處理,若是App的用戶量比較大,對服務器的壓力也是一個比較大的問題,畢竟性能數據的量會比較大。框架

    下面咱們來討論下APM系統對App性能監控的幾個維度。


    首先咱們來看看『內存』,內存的重要性相信你們毋庸置疑,它是對App性能的一個綜合性反映,一般咱們會考慮到『內存峯值、內存均值、內存抖動、內存泄漏』這樣幾個方面,這幾個考量維度綜合反映了App在對象操做、內存使用是否合理、精簡內存以及在內存泄漏上的處理是否恰當。


    在Android中,咱們能夠經過Runtime來獲取當前App所分配的內存信息,這也是或者實際內存信息最準確的方法。另外,咱們還能夠藉助『LeakCanary』來幫助咱們分析內存泄漏,將它集成到咱們本身的APM系統中,獲取它的內存泄漏信息。

    『CPU』也是你們很是關心的一個方面,他主要影響了App的發熱和卡頓,咱們主要經過『CPU峯值、CPU均值』來評判一個App對CPU的優化程度,在Android中,咱們能夠經過讀取/proc目錄下的CPUInfo來獲取CPU的一些性能信息。

    『啓動時間』是你們比較容易忽視的一個點,如今App接入的第三方SDK愈來愈多,大部分都須要在Application中進行初始化操做,這就會極大的拖慢啓動時間,這也是咱們優化的重點,關於App的啓動優化,你們能夠參考個人這篇文章一觸即發——App啓動優化最佳實踐


    另外,啓動優化也包括了頁面的啓動時間的考量,也就是頁面的渲染時間,在Android中,咱們能夠經過Choreographer和Activitylifecyclecallbacks來進行監聽,同時,對於一些關鍵信息,經過使用AOP,咱們能夠獲取更加詳細的信息。

    『UI性能』實際上在前一頁中已經有所體現了,除了前面考量的頁面渲染性能外,咱們對於『UI重繪、滾動幀率、頁面ANR』也要進行詳細的評測。這些東西,咱們能夠藉助開發者選項中的相關內容來進行測試。

    『耗電量』其實是App性能的一個上層表現,經過batteryhistorian咱們能夠在內測階段,分析App的耗電異常,在線上,經過監控App的使用和耗電,及時排除可能存在的異常。

    『網絡性能』是一個App看不見的體驗,國內網絡環境錯綜複雜,要面對各類流量劫持和各類不穩定因素,因此,對於網絡接口性能,也是咱們很是關注的點,例如『複雜網絡環境、接口往返時間、接口數據異常、CDN、服務器異常』這些都是咱們須要考慮的。


    那麼爲了保證在使用APM系統的時候,可以下降接入的成本,因此這塊咱們經過AOP方式來進行注入,避免大範圍的改動。

    『用戶行爲路徑』按道理來講並不算是APM的範疇,可是經過用戶行爲路徑的分析,咱們能夠針對用戶訪問量大的內容進行集中力量的優化,有助於提升咱們優化的效率。

    APM系統監控的方式主要有兩種,在內部測試階段,咱們使用『PC端性能檢測,它不影響性能,無需侵入代碼,可測試競品,可是需鏈接ADB』,在線上階段,咱們使用『客戶端性能檢測SDK,它不受設備限制、可進行場測,但對宿主App代碼有侵入、性能有必定影響』。

    有了採集的性能數據,咱們就能夠對數據進行分析和展現了,對於這塊,後端其實有不少成熟的方案,不少相似的數據展現圖表控件,這裏只舉幾個例子。

    這是藉助Python的一些開源圖表控件作的展現。

    這是藉助ELK平臺作的展現。

    這是藉助ELK平臺作的展現。ELK平臺是一個很是好的數據展現框架,詳細內容你們能夠參考個人這篇文章ELK前端日誌分析、監控系統

    前面咱們瞭解了現有APM系統的一些內容,固然,APM系統也是個與時俱進的系統,在現有的基礎內容上,咱們還能作不少事,例如『AI分析數據Pattern、本地異常數據監控算法、異常數據預警機制、服務端指令控制』,這些也是咱們後面的奮鬥目標。

本文分享自微信公衆號 - Android羣英傳(android_heroes)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索