提到開發(fā)一個產(chǎn)品,我們通常首先想到的是要實現(xiàn)什么樣的功能,但是除了功能之外,非功能屬性也會很大程度上影響一個產(chǎn)品的體驗效果,比如不定時出現(xiàn)的應(yīng)用卡死、崩潰現(xiàn)象。那為什么有的系統(tǒng)故障頻頻,有的卻很少出現(xiàn)這些問題呢,這就不得不提到我們今天的主角DFX了。
一、什么是DFX?
DFX是早在1960~1970年代就出現(xiàn)的產(chǎn)品設(shè)計理念,但是對于不少開發(fā)者而言,這是一個陌生的概念,什么是DFX?所謂DFX(Design For X),是指產(chǎn)品的非功能屬性設(shè)計,其中的X代表產(chǎn)品的某個特性或者產(chǎn)品生命周期的某個階段。從下面的圖可以看出,產(chǎn)品的非功能屬性是非常豐富的,它們直接影響產(chǎn)品的質(zhì)量、效率、成本等這些長期核心競爭力。圖1 產(chǎn)品DFX在過去的幾年里,華為軟件的交付效率和質(zhì)量一直在不斷提高,每個軟件大版本相較于上個版本交付時間在不斷縮短,故障率也有大幅降低,這些提升的背后,DFX起到了很重要的作用。隨著業(yè)界認(rèn)識的深入,DFX逐漸成為了卓越產(chǎn)品設(shè)計的基石以及頭部企業(yè)產(chǎn)品設(shè)計開發(fā)的基礎(chǔ)設(shè)施,因此現(xiàn)在對DFX又有了另一種解釋,即“Design For eXcellence”,面向卓越的設(shè)計。
二、什么是操作系統(tǒng)DFX?
現(xiàn)在我們了解了DFX的概念,也知道DFX設(shè)計對產(chǎn)品來說異常重要,因此我們在設(shè)計HarmonyOS的時候,堅持將DFX的理念帶了進(jìn)來,使其成為操作系統(tǒng)的公共基礎(chǔ)設(shè)施,使能高質(zhì)量卓越產(chǎn)品的設(shè)計、實現(xiàn)、測試和維護(hù)。通過對應(yīng)用程序、設(shè)備產(chǎn)品這些操作系統(tǒng)所服務(wù)的對象進(jìn)行考察,我們歸納出系統(tǒng)所能提供的非功能需求,并從中提煉出公共、基礎(chǔ)的DFX框架加入到HarmonyOS中,這就產(chǎn)生了操作系統(tǒng)DFX。開發(fā)者在使用HarmonyOS的過程中,可以根據(jù)產(chǎn)品需要直接使用或靈活拓展這些DFX能力。圖2 操作系統(tǒng)DFX看到這里,大家可能會覺得,操作系統(tǒng)DFX不就是將產(chǎn)品DFX的能力拷貝到操作系統(tǒng)中嗎。其實不然,操作系統(tǒng)DFX相較于產(chǎn)品DFX有兩個顯著的不同點:
由于操作系統(tǒng)不是為某類產(chǎn)品所專門定制的,而是一個全棧、公共的基礎(chǔ)設(shè)施,因此操作系統(tǒng)DFX主要聚焦記錄、診斷、恢復(fù)、觀測、剖析、維護(hù)和服務(wù)等開發(fā)產(chǎn)品所需要的公共能力。
操作系統(tǒng)DFX更多地關(guān)注開發(fā)者和設(shè)備商的開發(fā)體驗,以幫助他們設(shè)計出更卓越的產(chǎn)品為目標(biāo)。
三、HarmonyOS對DFX能力的要求
既然操作系統(tǒng)DFX是為了使能開發(fā)者開發(fā)出更卓越的產(chǎn)品,而HarmonyOS中也加入了DFX框架和能力,那么大家一定很好奇,HarmonyOS中的DFX是什么樣的?DFX能為HarmonyOS帶來些什么呢?在回答這些問題之前,我們先來看一下HarmonyOS對DFX能力的要求。幾乎所有的操作對DFX的要求都包含以下三方面:
1. 輕量有效:系統(tǒng)資源開銷少,易用易學(xué)習(xí),精準(zhǔn)有效。
2. 基礎(chǔ)通用:關(guān)鍵、基礎(chǔ)、通用、易擴(kuò)展,方便開發(fā)者裁剪和增強(qiáng)。3. 覆蓋全面:全面服務(wù)應(yīng)用和設(shè)備品類,全面服務(wù)開發(fā)者和設(shè)備商,全面覆蓋產(chǎn)品全生命周期。HarmonyOS除了這些基本要求外,還對DFX提出了新的要求:
1. 我們知道,HarmonyOS是面向超級終端的系統(tǒng),而不同超級終端的資源可能是差距巨大的,比如有的富設(shè)備提供的資源為RAM 8GB、ROM 512GB,而有的瘦設(shè)備卻只有RAM 128KB、ROM 2MB。面對這么大的資源差異,HarmonyOS對DFX提出了支持全棧多語言、可大可小、靈活部署的要求。
2. 除了面向超級終端,HarmonyOS的另一大特色是其豐富的分布式超級終端場景支持能力,因此HarmonyOS要求系統(tǒng)的DFX能力要能夠支持分布式場景,比如分布式的日志、分布式跟蹤、分布式調(diào)試調(diào)優(yōu)等等。 圖3 HarmonyOS對DFX能力的要求
四、HarmonyOS DFX框架與能力
通過上面的介紹,相信大家已經(jīng)對操作系統(tǒng)DFX的概念有了一定的了解,那么我們現(xiàn)在開始進(jìn)入正題,給大家介紹一下HarmonyOS DFX的框架與能力。圖4 HarmonyOS DFX框架和能力全景圖圖4的全景圖中間褐色部分為HarmonyOS DFX所提供的能力。HarmonyOS DFX提供了以下能力:(1)記錄能力:提供了輕量的日志、事件和跟蹤功能,可以將程序運行的軌跡記錄下來,為后續(xù)分析度量奠定基礎(chǔ)。(2)故障管理能力:提供精準(zhǔn)有效的故障檢測、定位和恢復(fù)能力。(3)觀測剖析能力:提供了統(tǒng)一便捷的觀測與剖析工具,主要包含信息導(dǎo)出、信息分析和聯(lián)動調(diào)試能力。那么這些DFX能力的作用又是什么呢?從全景圖中代表DFX的中間部分與周邊的關(guān)系可以看出,DFX的這些能力不僅需要為操作系統(tǒng)的其他子系統(tǒng)提供服務(wù),其更重要的使命是支撐影音娛樂、智慧出行等軟件應(yīng)用以及“1+8+N”等硬件設(shè)備。除此之外,這些能力也是產(chǎn)品開發(fā)運維工具鏈的基礎(chǔ),需要支撐開發(fā)調(diào)試的IDE工具以及產(chǎn)品運維大數(shù)據(jù)分析平臺的構(gòu)建。在了解了HarmonyOS DFX的框架之后,我們知道HarmonyOS DFX主要包含日志、事件、跟蹤、故障管理、觀測剖析這5部分。其中日志、事件和跟蹤體現(xiàn)了DFX的記錄能力,故障管理能夠幫助開發(fā)者快速定位和發(fā)現(xiàn)問題,而觀測剖析則是通過一系列工具,幫助開發(fā)者在集成的環(huán)境下使用這些DFX能力。接下來我們就來逐個看看HarmonyOS中所具備的這些DFX能力。1. 日志(HiLog)
日志通常被視為最簡單的功能,但是在開發(fā)者使用日志的過程中,有兩個比較明顯的問題,一個是濫打日志現(xiàn)象,另一個是隨著軟件規(guī)模和組織規(guī)模的擴(kuò)大,系統(tǒng)日志雜亂、流量超大的問題越來越嚴(yán)重,不僅容易泄露隱私,甚至連開發(fā)者想查看自己的日志都變得愈發(fā)困難。針對這兩個問題,HarmonyOS DFX設(shè)計了一套全新的日志功能——HiLog。下面是HiLog的示意圖。
圖5 日志(HiLog)從上圖可以看出,HiLog不僅提供了支持JS/Java/C/C++多語言的日志采集功能,還著重在日志分類查詢、流量控制和隱私處理上做了專門設(shè)計。下面我們逐個看看這些設(shè)計。(1)分類查詢
為了解決日志雜亂、不便查看的問題,HiLog對于不同級別的日志進(jìn)行了分類,提供分級查詢?nèi)罩镜拿睢2⑶页丝梢园凑占墑e(Level)、類型(Type)、標(biāo)簽(Tag)查看日志,還提供了按照領(lǐng)域(Domain)查看日志的命令。所謂領(lǐng)域是指跨軟件棧層次的業(yè)務(wù)垂域。那么我們?yōu)槭裁匆凑疹I(lǐng)域查看日志呢?我們設(shè)想一下以下場景:Camera功能領(lǐng)域包含應(yīng)用、服務(wù)和驅(qū)動,開發(fā)者如果想從一堆日志中過濾出Camera領(lǐng)域的日志,是沒有功能支持的,用老的過濾方法是不行的。為此,我們給需要的領(lǐng)域定義了DomainID,通過領(lǐng)域過濾來解決這個問題。
(2)流量控制
通過分類查詢,我們解決了日志查看不便的問題,但是超量的日志也會對系統(tǒng)性能產(chǎn)生巨大影響,根據(jù)經(jīng)驗,如果把系統(tǒng)中所有日志全部都打開,嚴(yán)重的情況下系統(tǒng)的性能可能會下降至70%。那么該如何解決日志超量的問題呢?
HiLog通過對不同領(lǐng)域的日志總量進(jìn)行流控來解決這個問題,在采集日志時,記錄每個領(lǐng)域的日志總量,識別出超過閾值的領(lǐng)域,然后對該領(lǐng)域的超量日志進(jìn)行控制。其中對超量日志的處理在調(diào)試(Debug)和商用(Release)兩種模式下有不同的處理策略:在Debug模式下,會提示超量日志,但不會真的丟棄超量日志。而在Release模式下,會將超量的日志丟棄并打印一條日志丟棄的提示。
圖6 流量控制的兩種模式(3)隱私管控
除了查詢不便和超量日志問題,日志的隱私管控也需要引起重視。在我們開發(fā)調(diào)試的過程中,經(jīng)常會傾向于打印更多的信息,這就很有可能將用戶隱私信息也打印出來,比如姓名、訪問的URL地址等。而現(xiàn)在對于隱私泄露的處罰是比較嚴(yán)厲的,歐盟的《通用數(shù)據(jù)保護(hù)條例》(General Data Protection Regulation,簡稱GDPR)針對隱私泄露最高罰款2千萬歐元或年度營業(yè)額的4%,因此,我們在日志打印的時候需要非常謹(jǐn)慎,不能將用戶隱私打印到日志里。
為了對隱私安全進(jìn)行管控,HiLog提供了變量打印控制功能,開發(fā)者可以通過格式化字符{private}或{public}靈活對變量內(nèi)容進(jìn)行聲明,如果聲明為{private},則表示該變量為隱私變量,在Release模式下會隱藏這些隱私的變量內(nèi)容,而對于不需要管控的變量,則可用{public}來指明,不進(jìn)行隱藏。
圖7 HiLog的變量打印控制2. 事件(HiView)
除了日志以外,HarmonyOS DFX對事件也提供了記錄能力,并為此設(shè)計了一套全新的事件框架(HiView)。
圖8 事件框架HiView我們知道,事件可能來源于應(yīng)用,也可能來源于系統(tǒng),因此HiView框架分為系統(tǒng)事件框架和應(yīng)用事件框架兩個部分。每個部分都提供了事件采集接口,系統(tǒng)事件框架使用HiSysEvent接口,應(yīng)用事件框架使用HiAppEvent接口。除此之外,HiView還提供了靈活的訂閱查詢接口,可以為后端處理者分享采集到的事件。該接口的應(yīng)用場景有很多,比如IDE可以通過此接口訂閱事件,從而在調(diào)試界面上呈現(xiàn)事件,而系統(tǒng)廠商也可以通過此接口訂閱事件,再進(jìn)行定制化處理。另外,HiView還對系統(tǒng)事件框架的處理邏輯做了插件化設(shè)計,通過在HarmonyOS上配置和部署系統(tǒng)插件,可以實現(xiàn)對不同大小終端設(shè)備的靈活適配。3. 跟蹤(HiTrace)
接下來,我們來看一下HarmonyOS DFX的最后一項記錄能力——跟蹤。
由于HarmonyOS是面向超級終端的系統(tǒng),因此除了像常規(guī)操作系統(tǒng)那樣跟蹤應(yīng)用間、進(jìn)程間的交互過程,還需要具備跨設(shè)備跟蹤程序交互過程的能力。在HarmonyOS中,這種分布式跟蹤的能力由HiTrace提供,而HiTrace通過TraceID的傳遞來對整個業(yè)務(wù)鏈進(jìn)行跟蹤。TraceID不僅能夠在APP、Native、Kernel之間跨層傳遞,還能夠跨進(jìn)程、甚至跨設(shè)備傳遞。值得一提的是,HiTrace是一種輕量級的跟蹤機(jī)制,在Wi-Fi條件下僅僅會增加微秒級延遲,而這種延遲對系統(tǒng)來說影響是非常小的。
圖9 HiTrace分布式跟蹤4. 故障管理
除了上面介紹的一些記錄能力,故障管理也是HarmonyOS DFX的一項重要能力。為了幫助開發(fā)者快速定位和發(fā)現(xiàn)問題,HarmonyOS DFX在系統(tǒng)側(cè)部署了全量、精準(zhǔn)的故障檢測機(jī)制,包含7類單系統(tǒng)故障檢測器(進(jìn)程崩潰、應(yīng)用卡死、資源泄露、踩內(nèi)存、整機(jī)重啟、不開機(jī)和系統(tǒng)死機(jī))和1類分布式故障檢測器,通過這些檢測器,故障檢測率可以達(dá)到80%以上。為了滿足HarmonyOS面向超級終端的特性,這些故障檢測器還可以在不同設(shè)備上根據(jù)資源靈活進(jìn)行部署。
圖10 故障檢測器由于篇幅原因,下面我們重點對這7類故障檢測器中的進(jìn)程崩潰檢測器、應(yīng)用卡死檢測器以及系統(tǒng)死機(jī)檢測器進(jìn)行介紹:(1)進(jìn)程崩潰檢測器
說到進(jìn)程崩潰大家一定都不陌生,這是一種最常見的故障,對此的檢測機(jī)制也都比較成熟,但當(dāng)前的檢測機(jī)制還存在著一些問題,比如,應(yīng)用進(jìn)程無法直接獲取自己進(jìn)程相關(guān)的崩潰日志,崩潰日志包含很多無效信息、重復(fù)信息,以及抓取崩潰調(diào)用棧失敗等。為了解決這些問題,HarmonyOS DFX對其提供的進(jìn)程崩潰檢測器做了以下特殊設(shè)計:
支持Java/JS/Native全棧檢測。
開放專門的API給應(yīng)用進(jìn)程查詢自己進(jìn)程的崩潰日志,能且只能獲取自己進(jìn)程的崩潰信息,解決了應(yīng)用無權(quán)獲取自己崩潰日志的問題。
通過對崩潰日志信息的去重,刪除了很多的無效信息,幫助開發(fā)者更加準(zhǔn)確地定位信息。
支持同時抓取多個進(jìn)程的調(diào)用棧,避免抓取日志不全的問題,保證更準(zhǔn)確地還原故障現(xiàn)場。
(2)應(yīng)用卡死&系統(tǒng)死機(jī)檢測器
應(yīng)用卡死和系統(tǒng)死機(jī)也是比較常見的故障,它們一般概率性發(fā)生,但是嚴(yán)重影響用戶體驗。檢測這類問題的難點在于,如何將軟件故障與用戶感知的死機(jī)故障做有效匹配,如果所有軟件bug都上報,開發(fā)者會無從下手,而如果漏檢了則又無法準(zhǔn)確定位。為此,HarmonyOS DFX對應(yīng)用卡死&系統(tǒng)死機(jī)檢測器,做了以下特殊設(shè)計:
在系統(tǒng)中部署了32個檢測點,全面檢測軟件死機(jī)故障。
另外增加了4個用戶行為檢測點,準(zhǔn)確檢測用戶對死機(jī)現(xiàn)象的反應(yīng)。
這些部署的檢測點支持根據(jù)不同設(shè)備的故障模式靈活部署,如果我們的設(shè)備沒有屏幕,那么就不用去部署亮滅屏超時及快速點擊屏幕檢測點。除了測點,判決規(guī)則也能夠根據(jù)故障檢測結(jié)果的大數(shù)據(jù)分析動態(tài)進(jìn)行調(diào)整。通過上述優(yōu)化,死機(jī)故障檢測率從30%提升到了80%。
圖11 應(yīng)用卡死&系統(tǒng)死機(jī)檢測5. 觀測剖析
看到這里,大家或許會有個疑問,開發(fā)者如何才能使用HarmonyOS DFX所提供的這些日志、事件、跟蹤和故障管理能力呢?那接下來我們就來介紹一下我們的觀測剖析工具,這些工具可以幫助開發(fā)者分析定位問題、調(diào)試調(diào)優(yōu)。
(1)信息導(dǎo)出工具(HiDumper)
開發(fā)者在開發(fā)、調(diào)試、測試、維護(hù)等過程中,需要頻繁觀測系統(tǒng)的各種信息,一般這些觀測信息都是通過信息導(dǎo)出來獲得。雖然通常操作系統(tǒng)都會提供各類信息導(dǎo)出工具,但是這些工具之間可能規(guī)則差異很大,并且很難對自動化測試工具或IDE進(jìn)行適配。隨著產(chǎn)品種類的增加,系統(tǒng)要導(dǎo)出的信息也變得異常豐富,信息導(dǎo)出接口多、能力雜,適配難的問題也更加凸顯。
為了避免上述信息導(dǎo)出問題,HarmonyOS提供了統(tǒng)一的系統(tǒng)信息導(dǎo)出工具HiDumper,相比于其他信息導(dǎo)出工具,HiDumper對命令參數(shù)進(jìn)行了統(tǒng)一的規(guī)格化管理,并對所有導(dǎo)出信息進(jìn)行分類、調(diào)度和輸出,減少了后端工具的適配難度。
圖12 信息導(dǎo)出工具HiDumper(2)分布式聯(lián)動調(diào)試工具
目前的APP調(diào)試一般都是使用本地調(diào)試器,每個待調(diào)試設(shè)備需要一套獨立的調(diào)試終端和IDE工具,這顯然不能很好地支持需要多設(shè)備之間聯(lián)動調(diào)試的分布式業(yè)務(wù)場景。為了應(yīng)對這種場景,HarmonyOS全新開發(fā)了分布式聯(lián)動調(diào)試工具,將跨設(shè)備的日志、事件、跟蹤及故障日志在同一個IDE調(diào)試窗口進(jìn)行關(guān)聯(lián)展示,給開發(fā)者類似單設(shè)備調(diào)試的窗口體驗。IDE運行時能自動捕獲異常信息,通過異常信息關(guān)聯(lián)出相關(guān)的事件列表和流水日志,再通過異常日志能準(zhǔn)確定位到代碼行,大大提高調(diào)試效率。
圖13 分布式聯(lián)動調(diào)試(3)分布式調(diào)優(yōu)工具
在介紹完觀測和調(diào)試工具之后,最后我們再來看一下調(diào)優(yōu)工具。HarmonyOS新開發(fā)的分布式調(diào)優(yōu)工具,能準(zhǔn)確全棧跟蹤JS/Java/C/C++等多語言調(diào)用鏈,記錄跨線程、跨進(jìn)程、跨設(shè)備等不同顆粒度的活動,生成規(guī)格化的HiTrace文件。通過將HiTrace文件在IDE圖形化工具中展示,開發(fā)者可以很便利地分析分布式應(yīng)用性能瓶頸。
圖14 分布式調(diào)優(yōu)以上就是我們對于HarmonyOS DFX關(guān)鍵部分的介紹了,相信大家對于DFX的概念也有了初步的認(rèn)識。后續(xù),HarmonyOS DFX將在缺陷檢測、故障恢復(fù)、大數(shù)據(jù)分析以及更多調(diào)試調(diào)優(yōu)工具方面繼續(xù)努力,為開發(fā)者提供更多能力,助力開發(fā)者開發(fā)更卓越的產(chǎn)品,大家敬請期待!
原文標(biāo)題:進(jìn)程崩潰/應(yīng)用卡死,故障頻頻怎么辦?
文章出處:【微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
DFx
+關(guān)注
關(guān)注
0文章
35瀏覽量
10526 -
開發(fā)者
+關(guān)注
關(guān)注
1文章
553瀏覽量
16990 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1967瀏覽量
30021
原文標(biāo)題:進(jìn)程崩潰/應(yīng)用卡死,故障頻頻怎么辦?
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論