乐趣区

关于harmonyos:HDC2021技术分论坛进程崩溃应用卡死故障频频怎么办

作者:jiwenqiang,DFX 技术专家

提到开发一个产品,咱们通常首先想到的是要实现什么样的性能,然而除了性能之外,非功能属性也会很大水平上影响一个产品的体验成果,比方不定时呈现的利用卡死、解体景象。那为什么有的系统故障频频,有的却很少呈现这些问题呢,这就不得不提到咱们明天的配角 DFX 了。

一、什么是 DFX?
DFX 是早在 1960~1970 年代就呈现的产品设计理念,然而对于不少开发者而言,这是一个生疏的概念,什么是 DFX?所谓 DFX(Design For X),是指产品的非功能属性设计,其中的 X 代表产品的某个个性或者产品生命周期的某个阶段。从上面的图能够看出,产品的非功能属性是十分丰盛的,它们间接影响产品的品质、效率、老本等这些长期外围竞争力。

图 1 产品 DFX

在过来的几年里,华为软件的交付效率和品质始终在一直进步,每个软件大版本相较于上个版本交付工夫在一直缩短,故障率也有大幅升高,这些晋升的背地,DFX 起到了很重要的作用。随着业界意识的深刻,DFX 逐步成为了卓越产品设计的基石以及头部企业产品设计开发的基础设施,因而当初对 DFX 又有了另一种解释,即“Design For eXcellence”,面向卓越的设计。

二、什么是操作系统 DFX?
当初咱们理解了 DFX 的概念,也晓得 DFX 设计对产品来说异样重要,因而咱们在设计 HarmonyOS 的时候,保持将 DFX 的理念带了进来,使其成为操作系统的公共基础设施,使能高质量卓越产品的设计、实现、测试和保护。通过对应用程序、设施产品这些操作系统所服务的对象进行考查,咱们演绎出零碎所能提供的非性能需要,并从中提炼出公共、根底的 DFX 框架退出到 HarmonyOS 中,这就产生了操作系统 DFX。开发者在应用 HarmonyOS 的过程中,能够依据产品须要间接应用或灵便拓展这些 DFX 能力。

图 2 操作系统 DFX

看到这里,大家可能会感觉,操作系统 DFX 不就是将产品 DFX 的能力拷贝到操作系统中吗。其实不然,操作系统 DFX 相较于产品 DFX 有两个显著的不同点:

因为操作系统不是为某类产品所专门定制的,而是一个全栈、公共的基础设施,因而操作系统 DFX 次要聚焦记录、诊断、复原、观测、分析、保护和服务等开发产品所须要的公共能力。
操作系统 DFX 更多地关注开发者和设施商的开发体验,以帮忙他们设计出更卓越的产品为指标。
三、HarmonyOS 对 DFX 能力的要求
既然操作系统 DFX 是为了使能开发者开发出更卓越的产品,而 HarmonyOS 中也退出了 DFX 框架和能力,那么大家肯定很好奇,HarmonyOS 中的 DFX 是什么样的?DFX 能为 HarmonyOS 带来些什么呢?在答复这些问题之前,咱们先来看一下 HarmonyOS 对 DFX 能力的要求。

简直所有的操作对 DFX 的要求都蕴含以下三方面:

轻量无效:系统资源开销少,易用易学习,精准无效。
根底通用:要害、根底、通用、易扩大,不便开发者裁剪和加强。
笼罩全面:全面服务利用和设施品类,全面服务开发者和设施商,全面笼罩产品全生命周期。
HarmonyOS 除了这些根本要求外,还对 DFX 提出了新的要求:

咱们晓得,HarmonyOS 是面向超级终端的零碎,而不同超级终端的资源可能是差距微小的,比方有的富设施提供的资源为 RAM 8GB、ROM 512GB,而有的瘦设施却只有 RAM 128KB、ROM 2MB。面对这么大的资源差别,HarmonyOS 对 DFX 提出了反对全栈多语言、可大可小、灵便部署的要求。
除了面向超级终端,HarmonyOS 的另一大特色是其丰盛的分布式超级终端场景反对能力,因而 HarmonyOS 要求零碎的 DFX 能力要可能反对分布式场景,比方分布式的日志、分布式跟踪、分布式调试调优等等。

图 3 HarmonyOS 对 DFX 能力的要求

四、HarmonyOS DFX 框架与能力
通过下面的介绍,置信大家曾经对操作系统 DFX 的概念有了肯定的理解,那么咱们当初开始进入正题,给大家介绍一下 HarmonyOS DFX 的框架与能力。

图 4 HarmonyOS DFX 框架和能力全景图

图 4 的全景图两头褐色局部为 HarmonyOS DFX 所提供的能力。

HarmonyOS DFX 提供了以下能力:

(1)记录能力:提供了轻量的日志、事件和跟踪性能,能够将程序运行的轨迹记录下来,为后续剖析度量奠定根底。

(2)故障治理能力:提供精准无效的故障检测、定位和恢复能力。

(3)观测分析能力:提供了对立便捷的观测与分析工具,次要蕴含信息导出、信息剖析和联动调试能力。

那么这些 DFX 能力的作用又是什么呢?从全景图中代表 DFX 的两头局部与周边的关系能够看出,DFX 的这些能力不仅须要为操作系统的其余子系统提供服务,其更重要的使命是撑持影音娱乐、智慧出行等软件应用以及“1+8+N”等硬件设施。除此之外,这些能力也是产品开发运维工具链的根底,须要撑持开发调试的 IDE 工具以及产品运维大数据分析平台的构建。

在理解了 HarmonyOS DFX 的框架之后,咱们晓得 HarmonyOS DFX 次要蕴含日志、事件、跟踪、故障治理、观测分析这 5 局部。其中日志、事件和跟踪体现了 DFX 的记录能力,故障治理可能帮忙开发者疾速定位和发现问题,而观测分析则是通过一系列工具,帮忙开发者在集成的环境下应用这些 DFX 能力。接下来咱们就来一一看看 HarmonyOS 中所具备的这些 DFX 能力。

  1. 日志(HiLog)
    日志通常被视为最简略的性能,然而在开发者应用日志的过程中,有两个比拟显著的问题,一个是滥打日志景象,另一个是随着软件规模和组织规模的扩充,系统日志芜杂、流量超大的问题越来越重大,不仅容易泄露隐衷,甚至连开发者想查看本人的日志都变得愈发艰难。针对这两个问题,HarmonyOS DFX 设计了一套全新的日志性能——HiLog。上面是 HiLog 的示意图。

图 5 日志(HiLog)

从上图能够看出,HiLog 不仅提供了反对 JS/Java/C/C++ 多语言的日志采集性能,还着重在日志分类查问、流量管制和隐衷解决上做了专门设计。上面咱们一一看看这些设计。

(1)分类查问

为了解决日志芜杂、不便查看的问题,HiLog 对于不同级别的日志进行了分类,提供分级查问日志的命令。并且除了能够依照级别(Level)、类型(Type)、标签(Tag)查看日志,还提供了依照畛域(Domain)查看日志的命令。所谓畛域是指跨软件栈档次的业务垂域。那么咱们为什么要依照畛域查看日志呢?咱们构想一下以下场景:Camera 性能畛域蕴含利用、服务和驱动,开发者如果想从一堆日志中过滤出 Camera 畛域的日志,是没有性能反对的,用老的过滤办法是不行的。为此,咱们给须要的畛域定义了 DomainID,通过畛域过滤来解决这个问题。

(2)流量管制

通过分类查问,咱们解决了日志查看不便的问题,然而超量的日志也会对系统性能产生微小影响,依据教训,如果把零碎中所有日志全副都关上,重大的状况下零碎的性能可能会降落至 70%。那么该如何解决日志超量的问题呢?

HiLog 通过对不同畛域的日志总量进行流控来解决这个问题,在采集日志时,记录每个畛域的日志总量,辨认出超过阈值的畛域,而后对该畛域的超量日志进行管制。其中对超量日志的解决在调试(Debug)和商用(Release)两种模式下有不同的解决策略:在 Debug 模式下,会提醒超量日志,但不会真的抛弃超量日志。而在 Release 模式下,会将超量的日志抛弃并打印一条日志抛弃的提醒。

图 6 流量管制的两种模式

(3)隐衷管控

除了查问不便和超量日志问题,日志的隐衷管控也须要引起器重。在咱们开发调试的过程中,常常会偏向于打印更多的信息,这就很有可能将用户隐衷信息也打印进去,比方姓名、拜访的 URL 地址等。而当初对于隐衷泄露的处罚是比拟严格的,欧盟的《通用数据保护条例》(General Data Protection Regulation,简称 GDPR)针对隐衷泄露最高罚款 2 千万欧元或年度营业额的 4%,因而,咱们在日志打印的时候须要十分审慎,不能将用户隐衷打印到日志里。

为了对隐衷平安进行管控,HiLog 提供了变量打印管制性能,开发者能够通过格式化字符 {private} 或{public}灵便对变量内容进行申明,如果申明为 {private},则示意该变量为隐衷变量,在 Release 模式下会暗藏这些隐衷的变量内容,而对于不须要管控的变量,则可用{public} 来指明,不进行暗藏。

图 7 HiLog 的变量打印管制

  1. 事件(HiView)
    除了日志以外,HarmonyOS DFX 对事件也提供了记录能力,并为此设计了一套全新的事件框架(HiView)。

图 8 事件框架 HiView

咱们晓得,事件可能来源于利用,也可能来源于零碎,因而 HiView 框架分为零碎事件框架和利用事件框架两个局部。每个局部都提供了事件采集接口,零碎事件框架应用 HiSysEvent 接口,利用事件框架应用 HiAppEvent 接口。除此之外,HiView 还提供了灵便的订阅查问接口,能够为后端解决者分享采集到的事件。该接口的利用场景有很多,比方 IDE 能够通过此接口订阅事件,从而在调试界面上出现事件,而零碎厂商也能够通过此接口订阅事件,再进行定制化解决。

另外,HiView 还对系统事件框架的解决逻辑做了插件化设计,通过在 HarmonyOS 上配置和部署零碎插件,能够实现对不同大小终端设备的灵便适配。

  1. 跟踪(HiTrace)
    接下来,咱们来看一下 HarmonyOS DFX 的最初一项记录能力——跟踪。

因为 HarmonyOS 是面向超级终端的零碎,因而除了像惯例操作系统那样跟踪利用间、过程间的交互过程,还须要具备跨设施跟踪程序交互过程的能力。在 HarmonyOS 中,这种分布式跟踪的能力由 HiTrace 提供,而 HiTrace 通过 TraceID 的传递来对整个业务链进行跟踪。TraceID 不仅可能在 APP、Native、Kernel 之间跨层传递,还可能跨过程、甚至跨设施传递。值得一提的是,HiTrace 是一种轻量级的跟踪机制,在 Wi-Fi 条件下仅仅会减少微秒级提早,而这种提早对系统来说影响是十分小的。

图 9 HiTrace 分布式跟踪

  1. 故障治理
    除了下面介绍的一些记录能力,故障治理也是 HarmonyOS DFX 的一项重要能力。为了帮忙开发者疾速定位和发现问题,HarmonyOS DFX 在零碎侧部署了全量、精准的故障检测机制,蕴含 7 类单系统故障检测器(过程解体、利用卡死、资源泄露、踩内存、整机重启、不开机和零碎死机)和 1 类分布式故障检测器,通过这些检测器,故障检测率能够达到 80% 以上。为了满足 HarmonyOS 面向超级终端的个性,这些故障检测器还能够在不同设施上依据资源灵便进行部署。

图 10 故障检测器

因为篇幅起因,上面咱们重点对这 7 类故障检测器中的过程解体检测器、利用卡死检测器以及零碎死机检测器进行介绍:

(1)过程解体检测器

说到过程解体大家肯定都不生疏,这是一种最常见的故障,对此的检测机制也都比拟成熟,但以后的检测机制还存在着一些问题,比方,利用过程无奈间接获取本人过程相干的解体日志,解体日志蕴含很多有效信息、反复信息,以及抓取解体调用栈失败等。为了解决这些问题,HarmonyOS DFX 对其提供的过程解体检测器做了以下非凡设计:

反对 Java/JS/Native 全栈检测。
凋谢专门的 API 给利用过程查问本人过程的解体日志,能且只能获取本人过程的解体信息,解决了利用无权获取本人解体日志的问题。
通过对解体日志信息的去重,删除了很多的有效信息,帮忙开发者更加精确地定位信息。
反对同时抓取多个过程的调用栈,防止抓取日志不全的问题,保障更精确地还原故障现场。
(2)利用卡死 & 零碎死机检测器

利用卡死和零碎死机也是比拟常见的故障,它们个别概率性产生,然而重大影响用户体验。检测这类问题的难点在于,如何将软件故障与用户感知的死机故障做无效匹配,如果所有软件 bug 都上报,开发者会无从下手,而如果漏检了则又无奈精确定位。为此,HarmonyOS DFX 对利用卡死 & 零碎死机检测器,做了以下非凡设计:

在零碎中部署了 32 个检测点,全面检测软件死机故障。
另外减少了 4 个用户行为检测点,精确检测用户对死机景象的反馈。
这些部署的检测点反对依据不同设施的故障模式灵便部署,如果咱们的设施没有屏幕,那么就不必去部署亮灭屏超时及疾速点击屏幕检测点。除了测点,裁决规定也可能依据故障检测后果的大数据分析动静进行调整。通过上述优化,死机故障检测率从 30% 晋升到了 80%。

图 11 利用卡死 & 零碎死机检测

  1. 观测分析
    看到这里,大家或者会有个疑难,开发者如何能力应用 HarmonyOS DFX 所提供的这些日志、事件、跟踪和故障治理能力呢?那接下来咱们就来介绍一下咱们的观测分析工具,这些工具能够帮忙开发者剖析定位问题、调试调优。

(1)信息导出工具(HiDumper)

开发者在开发、调试、测试、保护等过程中,须要频繁观测零碎的各种信息,个别这些观测信息都是通过信息导出来取得。尽管通常操作系统都会提供各类信息导出工具,然而这些工具之间可能规定差别很大,并且很难对自动化测试工具或 IDE 进行适配。随着产品种类的减少,零碎要导出的信息也变得异样丰盛,信息导出接口多、能力杂,适配难的问题也更加凸显。

为了防止上述信息导出问题,HarmonyOS 提供了对立的零碎信息导出工具 HiDumper,相比于其余信息导出工具,HiDumper 对命令参数进行了对立的规格化治理,并对所有导出信息进行分类、调度和输入,缩小了后端工具的适配难度。

图 12 信息导出工具 HiDumper

(2)分布式联动调试工具

目前的 APP 调试个别都是应用本地调试器,每个待调试设施须要一套独立的调试终端和 IDE 工具,这显然不能很好地反对须要多设施之间联动调试的分布式业务场景。为了应答这种场景,HarmonyOS 全新开发了分布式联动调试工具,将跨设施的日志、事件、跟踪及故障日志在同一个 IDE 调试窗口进行关联展现,给开发者相似单设施调试的窗口体验。IDE 运行时能主动捕捉异样信息,通过异样信息关联出相干的事件列表和流水日志,再通过异样日志能精确定位到代码行,大大提高调试效率。

图 13 分布式联动调试

(3)分布式调优工具

在介绍完观测和调试工具之后,最初咱们再来看一下调优工具。HarmonyOS 新开发的分布式调优工具,能精确全栈跟踪 JS/Java/C/C++ 等多语言调用链,记录跨线程、跨过程、跨设施等不同颗粒度的流动,生成规格化的 HiTrace 文件。通过将 HiTrace 文件在 IDE 图形化工具中展现,开发者能够很便当地剖析分布式应用性能瓶颈。

图 14 分布式调优

以上就是咱们对于 HarmonyOS DFX 要害局部的介绍了,置信大家对于 DFX 的概念也有了初步的意识。后续,HarmonyOS DFX 将在缺点检测、故障复原、大数据分析以及更多调试调优工具方面持续致力,为开发者提供更多能力,助力开发者开发更卓越的产品,大家敬请期待!

退出移动版