Crash率是衡量一款APP質量好壞的重要指標之一,不只會影響用戶體驗,也可能影響用戶存量。一旦出現問題,可能會給企業帶來嚴重損失。數據庫
本文由美團技術專家諶天洲分享美團APP Crash率從千分之一到萬分之一治理過程當中所作的大量實踐工做。工具
美團做爲一個平臺化的APP,背後有20+團隊設計和30+業務。優化
在Crash治理過程當中面對的挑戰有三項:體量大、迭代快和日活高。這三項挑戰帶來的直接影響是溝通成本上升和防範難度加大。所以在實際治理過程,主要圍繞基礎能力、治理效率兩個層面進行探索和優化建設。線程
Crash治理的基礎能力主要體如今三個層面:能發現、能定位和能修復。設計
在發現能力層面,美團有一套異常監控退出系統,可發現除Java&JNI Crash&ANR之外其餘類型的異常退出。在定位能力層面,有可提供內存泄漏路徑及OOM時的內存快照的內存監控體系,有可提供線程現場及任務現場的線程管控體系。除此之外,還有動態日誌系統提供額外的方法調用鏈及參數信息。3d
內存問題最典型的呈現形式是OOM,其中80%經過Leak監控系統發現預防,另外20%的內存問題,對於大致量APP須要從全局對內存資源問題進行監控和調查分析。代理
美團的內存監控體系分爲線下和線上兩個場景。線下經過Leak監控系統能預防發現80%的OOM問題,線上創建隨時獲取OOM內存現場的監控能力。日誌
美團APP常常會遇到用戶個性化的使用場景沒法復現和定位的問題。對此,美團提出了一套動態日誌系統——代碼規範
在編譯期對應用代碼經過插樁實現代理,運行期同步記錄,出現異常時可主動觸發上報,也能夠由服務端主動回撈。基於插樁實現的代理邏輯,可實施獲取原方法執行時的方法名、入參和返回值信息,再將這些信息序列化後存儲到數據庫,由此可在必要的時候獲取到較完善的方法調用棧歷史,進而定位問題。cdn
在修復能力層面,美團APP一度深受機型多、系統雜帶來的framework層的問題困擾。此外,美團APP也常常會遇到常規日誌體系沒法覆蓋的接口問題。
針對這兩類問題,參考熱修復的方法替換原理,開發並完善了一套小工具——「Graft」。它的基本原理是在native層經過方法替換實現對Java層方法的hook和代理,進而在Java層實現方法代理和方法替換。
這套工具能夠動態代理或替換幾乎全部Java層的方法(包括framework層),使得美團APP的修復能力從自有代碼和第三方代碼有效覆蓋到framework層。
爲了提升治理效率,實際治理過程逐漸造成PR檢查流程、自動檢查平臺和Crash平臺三大流程和平臺。
PR檢查流程主要針對PR階段進行代碼規範性檢查、代碼准入檢查和穩定性案例檢查;自動檢查平臺針對以往案例進行定製化防範檢查。Crash平臺是整個穩定性治理的核心,在建設的考量中主要遵循規範化、流程化、自動化,它主要涵蓋接入管控、聚合策略、頻道工單、報警系統、基礎工具、模塊覆蓋,能夠經過強大的複用能力快速接入並管理幾乎全部穩定性相關的問題。
Crash平臺是整個穩定性治理的核心,在建設的考量中主要遵循規範化、流程化、自動化,它主要涵蓋接入管控、聚合策略、頻道工單、報警系統、基礎工具、模塊覆蓋,能夠經過強大的複用能力快速接入並管理幾乎全部穩定性相關的問題。
在PR階段,PR檢查流程可自動識別出增量代碼是否被現有體系覆蓋,並經過Crash平臺的接入管控系統督促增量代碼的責任人完善基本信息、頻道信息、聚合配合及自動工單配置等等。
在開發或全量過程當中一旦發現異常,Crash平臺會自動完成堆棧聚合、頻道識別、報警評估及工單跟蹤等工做。
Crash率是APP最重要的指標之一,諶天洲建議開發者創建解決Crash的長效機制,找到最合理的解決方案。隨着版本的不斷迭代,Crash治理之路才能離目標愈來愈近。
對於美團Crash治理的實踐分享,開發者以爲有哪些值得借鑑和能夠改進的地方呢?歡迎留言說出您的見解~