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