技術分享:火山引擎如何助力飛書提升APP性能
通過使用火山引擎 MARS-APM Plus 的 memory graph 功能,飛書研發團隊有效分析定位問題線上 case 多達30例,線上 OOM 率降低到了 0.8‰,降幅達到 60%。大幅提升了用戶體驗,為飛書的性能品質保駕護航。
1.應用程序穩定性是影響用戶體驗及留存的關鍵因素
對于移動 App 的開發者來說,最基礎也是最關注的問題就是應用程序的穩定性。而崩潰問題是影響穩定性的重要因素, 包括 NSException、Signal、卡死、OOM(Out Of Memory) 等問題類型。其中,OOM 問題是隨著業務的迭代,慢慢進入了開發者視野。
OOM 問題往往潛伏在復雜的業務背景下,復現困難且缺少有效的問題排查手段。目前在 iOS 端排查內存問題的工具主要包括 Xcode 提供的 Memory Graph 和 Instruments 相關的工具集,它們能夠提供相對完備的內存信息,但是應用場景僅限于開發環境,無法在生產環境使用。由于內存問題往往發生在一些極端的使用場景,線下開發測試一般無法覆蓋對應的問題,Xcode 提供的工具無法分析處理大多數偶現的疑難問題。
飛書是字節跳動旗下先進企業協作與管理平臺,不僅包含一站式整合及時溝通、智能日歷、音視頻會議、飛書文檔、云盤等辦公協作套件,更提供飛書 OKR、飛書招聘、飛書績效等組織管理產品。作為一款企業協作與管理平臺,業務復雜度非常高,稍有不注意就會觸發 OOM,導致程序崩潰。
那么飛書的業務有多復雜呢?舉例來說:
飛書消息列表頁的消息類型多達十余種,包括文檔預覽,視頻、復雜的富文本等;
飛書會議在千人視頻中可以對視頻做各種特效渲染,視頻過程能共享文檔,千人在線編輯文檔;
飛書文檔本身支持插入各種類型信息,比如復雜計算公式、腦圖、UML 圖、同時也支持外部擴展;
飛書把內存的使用運用到了極限,稍不留意就會導致 OOM。試想一下,千人視頻會議的時候,突然間因為內存問題導致崩潰,會議方是什么感受?給客戶發送一條復雜的消息,因為內存問題,客戶的手機崩潰了,客戶是什么感受?基于此,解決內存問題、分析定位線上 OOM 原因,是飛書的首要目標。
2.火山引擎MARS-APM Plus為飛書性能保駕護航
APM Plus 是字節跳動應用開發套件 MARS 下的性能監控產品,通過先進的數據采集與監控技術,為企業提供全鏈路的應用性能監控服務,解決企業對各端監控的需求。具備非侵入式監控、豐富的異常現場還原能力,助力企業提升異常問題排查與解決的效率、優化應用品質,以降低成本提高收入。
MARS-APM Plus-功能介紹
飛書通過火山引擎 MARS-APM Plus memory graph 提供的類聚合列表,能清晰的發現內存占用排名靠前的類,每一個類還可以向下鉆取到內存節點單元,通過內存節點單元可以查詢到節點的引用關系,順藤摸瓜,找到最開始的父節點,同時還可以逆向去看其他內存節點單元是否也是同樣的引用關系,以此來佐證該內存問題。通過這種分析思路,我們發現了超大圖問題、超多幀 gif 問題、資源預加載問題等等。
火山引擎 MARS-APM Plus 的內存優化分「 OOM 趨勢」、「泄露分析」、「大對象」和「單設備查詢」。
OOM 趨勢:提供了內存泄露的指標分析。除了4個核心指標( OOM 次數、OOM率、影響用戶數、影響用戶比例)外,還提供進一步分析 OOM 的擴展指標,如:App占用內存大小、App 占用內存比例。
泄露分析:提供了導致泄漏的對象類型列表和詳情分析。在這里可以逐一分析那些嚴重導致內存泄露的對象。
對象列表中:提供了占用內存過大的大對象以及數量眾多聚合而成的小對象。以幫助研發更準確地了解內存被哪些對象占用。
單設備查詢中:可直接分析單臺設備的內存問題。iOS 提供了直接精準分析單臺設備的內存引用樹、支配樹、實例等,Android 可下載查詢其原始數據。
在使用 memory graph 前,飛書線上分析手段單一,也不能給出明確的理論依據,一度線上OOM 用戶影響率達到2‰,通過使用 memory graph,我們有效分析定位問題線上 case 多達 30 例,線上 OOM 率降低到了 0.8‰,降幅達到 60% 。大幅提升了用戶體驗,為飛書的性能品質保駕護航。
3.助力企業提升IT異常問題排查與解決的效率、優化應用品質
APM Plus 為企業提供針對應用服務的品質、性能以及自定義埋點 的 APM 服務。基于海量數據的聚合分析,平臺可幫助客戶發現多類異常問題,并及時報警,做分配處理,同時平臺提供了豐富的歸因能力,包括且不限于異常分析、多維分析、自定義上報、單點日志查詢等,結合靈活的報表能力可了解各類指標的趨勢變化。除飛書外,APM Plus 已服務了抖音、今日頭條、Tik Tok 等多個超大規模用戶量級移動 App。
火山引擎 MARS-APM Plus 的內存監控可定位到因內存占用導致的異常,并提供多種排查內存異常的指標、維度與手段:
無死角地發現已出現的內存異常問題,有完備的歸因鏈路。不僅提供了豐富的指標可分析內存問題并確定影響范圍,并能夠給出導致內存異常的對象列表,還能夠分析單臺設備上具體異常節點。提供從大盤到代碼的層層遞進的歸因分析能力,極大提高研發的排查效率
提供預防內存異常的能力。可給出有導致內存異常風險的對象列表,可提前針對性地優化,降低事故發生率,在影響用戶前就解決掉潛在風險。
目前,火山引擎 MARS-APM Plus 面向新用戶提供試用30 天的限時免費服務。其中包含 App 監控、Web 監控、Server 監控、小程序監控,App 監控和 Web 監控各500 萬條事件量, Server 與小程序監控限時不限量。