分佈式調試、調優能力解決方案|HDC2021技術分論壇

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}},{"type":"color","attrs":{"color":"#40A9FF","name":"blue"}}],"text":"作者:yangjianwei 華爲高級工程師","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"HarmonyOS致力於提供1+8+N智慧全場景解決方案,打造設備流轉、多端協同的分佈式體驗,實現一次開發、多端部署,讓分佈式應用的開發更加簡單。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"針對分佈式應用的調試問題,DevEco Studio提供了分佈式調試、調優能力解決方案,解決開發者面臨的調試不連續、操作繁瑣、功能和性能異常難定位等衆多痛點問題。下面讓我們先來一睹爲快。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"注:本文涉及的DevEco Studio分佈式調試和調優的部分能力依賴於OS接口,計劃將在HarmonyOS 3.0 Beta版本系統發佈後才能支持。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"一、分佈式調試能力","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DevEco Studio將爲開發者提供分佈式調試能力解決方案。通過在各個設備上的Debug Agent代理統一對接不同語言的調試器,調試代理負責將DevEco Studio中的調試插件中的調試命令轉換爲對不同調試器的請求,包括單步調試Step Into/Step Out/Step Over、跨模塊步入,恢復程序等調試功能,Debugger插件負責將所有的調試信息以符合開發者需求的方式展示出來。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/84/84ef0f43d7a58b68adf17808a520e19d.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖1 DevEco Studio的分佈式調試能力","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下面,我們將對DevEco Studio新增的分佈式調試能力進行介紹。 ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"strong","attrs":{}}],"text":"1. 分佈式跨設備跨語言調試","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DevEco Studio將支持開發者選擇多個設備進行調試,並能在多個設備、多種語言的調試間流暢切換。在跨設備、跨語言調用接口處,通過點擊“Step Into”,能激活被調用設備的調試,中斷在調用接口的響應處,並繼續調試。同時,在IDE中還展示了多設備多語言調試的堆棧列表,實現斷點統一管理、變量統一查看,使開發者定位問題更加高效便捷。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"strong","attrs":{}}],"text":"2. 分佈式異常故障自動捕獲","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在分佈式應用開發過程中,開發人員最依賴的就是日誌,日誌數量過大容易錯過關鍵信息。HiTrace新增的自動異常捕獲與輔助診斷的能力,可將應用運行異常自動上報到Events視圖中,包括Java/C++/JS的崩潰異常。可通過異常事件中的堆棧信息,直接定位到源代碼。同時可以查看普通業務事件信息,並關聯出與此事件相關聯的日誌。這些功能極大減少分佈式場景下收集、查看、分析日誌的時間。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/2f/2f7a968da7dfb7184e5539b1c0022a3b.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖2 異常故障自動捕獲","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"strong","attrs":{}}],"text":"3. 跨設備狀態流轉、分佈式堆棧可視化","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當前開發者通常是通過查看調試的堆棧列表來定位跟蹤代碼問題,且分佈式應用的堆棧列表往往是割裂不連續的,給開發者跟蹤分佈式調度的代碼造成了阻礙。因此DevEco Studio將推出跨設備流轉、分佈式堆棧可視化功能。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"(1)跨設備狀態流轉","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Device Transfer視圖以生動簡潔的形式呈現了設備間的組網關係和連接狀態,將設備以不同組網的分類形式進行分組,組內之間的設備可以顯示它們的具體信息和原子化服務的動態流轉關係。如圖所示,每個球狀圖形表示一臺設備,藍色表示與IDE相連接,黃色表示該組網內未與IDE連接的設備,它們之間的箭頭代表設備間原子化服務能力的調用,有助於開發者快速理解設備間的流轉及互動關係。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/6a/6aa8ef98132818edf572b28d323e484b.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖3 Device Transfer視圖","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"(2)分佈式堆棧可視化","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式堆棧可視化功能打破陳規,將函數之間的調用關係以直觀的可視化結構圖形呈現出來,並保留了歷史調用,克服了跨設備跨語言堆棧列表分割不連續的弊端,如圖中,Call Stack view呈現了不同設備調試的模塊,它們使用不同的顏色表示,點擊圖中的函數節點能自動定位到代碼中的函數處。使開發者溯源代碼更加輕鬆快捷。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/11/119e3d5602c376f5f4b7b74a848b950c.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖4 Call Stack視圖","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"strong","attrs":{}}],"text":"4. 時光調試:在JS上支持逆向調試","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"調試過程中,開發者錯過查看關鍵性變量值,或者想調試函數已經走完的分支,此時往往需要重新啓動調試,定位一個bug,往往需要調試很多次才能解決,費時費力。如何時光穿梭,回到執行需要調試的代碼位置處?","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DevEco Studio將提供時光調試功能,幫助你回退到關鍵代碼位置,調試一次即可找出代碼問題。時光調試支持在函數體內自由前進或回退,支持回退到上一行(Step Back)、回退到上一個斷點(Run Back To Breakpoint),回退到鼠標位置(Run Back To Active Line),回退到上一個函數的最後一行(Step Back Into),回退到方法的調用處(Step Back Out)。一切變量值、一切調試狀態都恢復至你未執行後續代碼的狀態,幫助你調試一次即可找出代碼問題。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/f6/f623602a9d043acacee933fc57a1d38a.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖5 JS調試基礎上增加逆向調試","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"二、分佈式調優能力","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式協同場景中跨設備業務性能瓶頸如何定位? JS應用的性能分析與內存分析如何來做? 性能採集過程中的數據是否合理?這些性能調優的問題,同樣也困擾着很多的開發者。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DevEco Studio中也將新增HarmonyOS分佈式性能Profiler的整體方案,在每個設備上會自動部署一個Profiler的代理,這個代理將通過與JS執行引擎,Java執行引擎,C++性能採集器等模塊進行交互,獲取代碼執行過程中的性能數據,經過時鐘同步,生成面向開發者的多種運行性能和內存分析視圖。下面我們將對DevEco Studio中新增的多設備協同的性能跟蹤、基於JS的應用的運行性能和對內存分析,針對性能數據自動輔助分析方進行闡述。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/97/97a81a60f04dd448ed718b237b9d2d52.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖6 分佈式性能調優能力","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"strong","attrs":{}}],"text":"1. 多設備協同性能跟蹤","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DevEco Studio將提供跨設備協同的系統跟蹤能力。主要包括:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"● 丟幀統計","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"統計調試過程中丟幀情況,顯示丟幀的序號以及丟幀率;","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"● 分佈式時延","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一次分佈式業務運行過程中,同時完成跨設備的系統調用跟蹤;提供跨設備調用棧的時延,不同設備上各系統調用使用不同顏色區分,各調用過程的耗時以及調用間的時延分別顯示,並且高亮此次業務中高耗時的階段,可以協助開發者快速定位耗時的流程。同時Timeline和調用棧視圖可雙向聯動,提升調試效率。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/61/61b30a7924ae561648a3f8c3a1618fa7.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖7 系統跟蹤能力","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"strong","attrs":{}}],"text":"2. JS應用運行性能分析","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"JS作爲HarmonyOS應用開發的主要語言。我們開發網頁時對JS性能分析往往都是在Chrome開發工具中來完成,現在在DevEco Studio中,增加了對JS應用運行性能分析的支持。用戶可通過Call Chart、Flame Chat、Top Down和Bottomup等視圖查看方法間調用關係和調用消耗時長,便於識別長耗時方法。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/4f/4f4e8d2d08eab12b36983e5dc37fe1b2.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖8 Call Chart和Flame Chat視圖","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"strong","attrs":{}}],"text":"3. JS應用堆內存分析","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"針對JavaScript內存無法回的收情況,DevEco Studio將新增對JS應用堆內存分析的支持。開發者可通過實時查看應用內存佔用和變化趨勢,快速發現可能存在的內存抖動和內存泄漏等問題。通過抓取/導入/導出JS堆內存快照,可進一步查看JS對象內存分配、調用、引用情況。開發者還可以比對分析多個內存快照,觀察各對象的內存詳細變化情況,便於快速定位可能造成內存性能瓶頸或者內存泄漏的對象。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/49/494669a07d9a372e05c114cebc435eda.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖9 堆內存分析","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"strong","attrs":{}}],"text":"4. 性能數據自動輔助分析","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在性能分析過程中,一般的性能分析工具只給出了對性能數據的基礎統計。針對啓動和UI方面的體驗問題,DevEco Studio自動對可能存在的問題給出提示與修改建議,開發者可根據建議進一步確認並進行優化。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶從下拉列表中選取已安裝的應用包名,IDE工具會自動啓動選取的應用並抓取應用啓動過程中的CPU佔用率,IO讀寫量,使用內存等資源信息和該進程的函數調用信息。抓取結束後點擊記錄圖標會自動分析獲取信息,如果資源佔用過多或函數調用時長偏長,會在性能分析報告頁具體展示詳細信息,同時部分常見問題會有優化建議的提示,助力開發者快速發現性能短板,提升應用性能體驗。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b0/b08a70a1bd1124358bc5432c1c8ea198.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":9}}],"text":"圖10 性能數據自動輔助分析","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DevEco Studio還爲開發者提供應用功耗問題分析以及功耗調優的能力,主要包括:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"● 整機耗電分解","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"提供了整機的耗電情況,並對TOP耗電器件CPU、屏幕、GPU、Modem、WIFI、Audio、BT、GPS等器件進行了功耗分解,並記錄了影響器件耗電的各器件的狀態詳情,同時支持系統維度的影響功耗狀態的信息展示,方便開發者對整機的耗電情況有整體把握,並進行耗電分析。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"● 應用分解","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"將單個應用的耗電情況按照器件維度分解,後續可支持應用線程維度的拆解,方便識別到應用功耗問題時,快速的鎖定問題線程。同時對應用CPU負載率實時展示,開發者可方便看到應用的CPU的負載情況。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"至此,本期內容就結束了,隨着時代的發展,分佈式應用的發展已成趨勢,那些曾讓開發者抓狂的分佈式調優及調試問題,DevEco Studio中新增的功能定能幫你解決。","attrs":{}}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章