如何借用友盟+U-APM隨時監控應用質量?
一、你的App也經常“作妖”么?
曾經聽一位金融類的top sales吐槽自家App穩定性的問題:耗費大半年精力終于簽下行業頭部客戶,但在遠程指導客戶操作時客戶手機App直接崩潰。等最后問題修復好已經幾個小時過去了。在一寸光陰一寸金的金融領域,產品的市價早就變了,到碗里的肥鴨子就這么飛了。
類似崩潰這樣的App性能問題是造成用戶流失的罪魁禍首之一,也是反映App質量最基本和最關鍵的一環。App 的性能問題還包括網絡請求錯誤或超時、響應速度慢、列表滾動卡頓、流量大、耗電等等,這其中崩潰帶來的影響是最為嚴重的。相關數據顯示,當iOS的崩潰率超過0.8%,Android的崩潰率超過0.4%的時候,活躍用戶有明顯下降態勢。它不僅會造成關鍵業務中斷、用戶留存率下降、品牌口碑變差等負面影響,而且會直接帶來卸載和流失。
二、定位、捕獲豐富錯誤問題
導致 App 性能低下的原因有很多,除去設備硬件和軟件的外部因素,其中大部分是開發者錯誤地使用線、系統函數、編程范式、數據結構等導致的。即便是最有經驗的程序員,也很難在開發時就能避免所有導致性能低下的“坑”,因此解決性能問題的關鍵是在于能不能盡早地發現和定位和捕獲這些錯誤。
隨著App業務的與日俱增,各個系統也越來越復雜,服務間的調用,服務的依賴,以及分析服務的性能問題也越棘手,因此引入性能監控平臺尤為重要。能不能快速、準確、豐富的定位錯誤類型,是衡量性能監控產品的首要因素。以友盟+的U-APM應用性能監控平臺為例,無論是 Java、Native 崩潰,還是 ANR、系統各種強殺等問題;無論是虛擬地址耗盡、物理內存耗盡、棧溢出、fd 耗盡,還是堆破壞等極端環境;無論是普通的單進程,還是多進程場景......所有的異常問題U-APM都可以捕獲到,并會生成內容完整、豐富、全面的日志。
以ANR捕獲為例,U-APM的捕獲實現原理是:系統的 system_server 進程在檢測到 App 出現 ANR 后,會向出現 ANR 的進程發送 SIGQUIT (signal 3) 信號。正常情況下,系統的 libart.so 會收到該信號,并調用 Java 虛擬機的 dump 方法生成 traces。在使用 U-APM SDK 后,SDK 會攔截 SIGQUIT。在出現 ANR 時,libcrashsdk.so 會優先收到信號,并生成 traces 和 ANR 日志。在 SDK 處理完信號后,會將信號繼續傳遞給系統的 libart.so,讓系統生成 ANR traces.txt。在使用 U-APM SDK 后,SDK 會攔截 SIGQUIT。在出現 ANR 時,libcrashsdk.so 會優先收到信號,并生成 traces 和 ANR 日志。生成完整的 ANR 日志后,U-APM還會提供獲取觸發 ANR 的原因、手機中 TOP 進程 CPU 使用率、ANR 進程中 TOP 線程 CPU 使用率、CPU 各核心處理時間分布情況、磁盤 IO 操作等待時長等重要信息。
圖:U-APM SDK ANR 捕獲原理,紅色線為 U-APM SDK 處理 ANR 信號和生成 ANR 日志的流程,紫色線為系統生成 ANR traces.txt 的流程。
三、實時監控告警與修復驗證
作為App開發者,相信大家一定遇到過類似的尷尬問題:故障永遠都是你的客戶告訴你的,而在什么時候發生的,你也無法確定,只能通過客戶的反饋倒推時間節點,最后從錯誤日志中得到相對完整的日志信息。
那開發者如何掌握主動權?錯誤日志有可能會有人漏記錄,平均修復時間(MTTR)更不用想了,需要從 0.1 開始定位,先看 App是哪個模塊報錯,再猜測是哪個服務導致,再打開鏈路追蹤系統,或是日志平臺等。稍微復雜些的,排查來來往往基本都是半小時、一小時以上......
破局的核心點就是把監控告警的生態圈建設好。整個通路的觸達渠道需要即時有效,最好能覆蓋企業辦公中主要消息流通的渠道。以友盟+應用性能監控平臺U-APM為例,涵蓋的觸達渠道就有郵件、釘釘、企業微信、飛書等等。其中后三者可以通過webhook的方式直接將監控告警發送到群組里,讓組內的研發同學第一時間獲取到有效信息,下圖中展示了U-APM中的告警計劃設置界面,可以設置監控的錯誤類型、閾值、版本、觸達方式。
此外,針對一些交易型高價值應用遇到的崩潰問題,比如券商/銀行的金融理財類App,如果某一用戶在購買時效性短的金融產品時發生異常,解決錯誤的快慢會對用戶造成極大的影響。這時就需要單點追查這個用戶的行為路徑,即時排查錯誤原因。如U-APM就為開發者提供了行為日志、用戶錯誤細查的功能。行為日志是由自動采集的頁面信息組成的,方便開發者根據用戶崩潰時的前項頁面路徑,來定位和發現崩潰現場。用戶錯誤細查可以根據用戶的賬號(開發者上傳)搜索所選時間范圍內的所有錯誤、日志以及趨勢圖。可以根據用戶的崩潰日志復現崩潰。告別去服務端撈Log的尷尬,節省跟用戶溝通復現崩潰的時間和人力成本,同時還可以避免崩潰無法復現的窘境。
三、工具哪家強?
市面上性能監測的產品其實并不多,能統計多維度crash,涵蓋多種ANR,并有告警功能的就更少了一些。
上文提到的友盟+的U-APM應用性能監控平臺其實完全可以滿足開發者性能監控的各類問題。