电子设备的监测方法、装置、电子设备及存储介质与流程

文档序号:33641452发布日期:2023-03-29 02:12阅读:67来源:国知局
电子设备的监测方法、装置、电子设备及存储介质与流程

1.本技术属于通信技术领域,具体涉及一种电子设备的监测方法、装置、电子设备及存储介质。


背景技术:

2.随着电子设备的发展,程序产品的更新换代也越来越快,用户对程序的要求也随之增高,程序的系统流畅性、低内存消耗、低卡顿、快速启动等性能指标已经成为高质量产品重要的一环,因此,电子设备需要对程序的性能进行监控诊断,以使得后台开发人员可以根据诊断结果定位程序存在的问题。
3.以对程序执行耗时的诊断为例进行说明,相关技术中的程序监控诊断技术,可以收集到出现高cpu耗时问题后那一刻的调用栈信息,然而,此时引发问题的调用可能已经过去一段时间了,因此这个调用栈信息具有滞后性,如此,电子设备对程序性能的监测诊断结果准确率较低。


技术实现要素:

4.本技术实施例的目的是提供一种电子设备的监测方法、装置、电子设备及存储介质,能够解决电子设备对程序性能的监测诊断结果准确率较低的问题。
5.第一方面,本技术实施例提供了一种电子设备的监测方法,该方法包括:获取第一函数调用树,该第一函数调用树包括多个树节点,每个树节点分别对应至少一个函数体中的一个函数体;该至少一个函数体为使用数据时所调用的函数体;根据多个树节点分别对应的资源消耗量,调整第一函数调用树,得到第二函数调用树,该第二函数调用树包括目标树节点,一个树节点对应的资源消耗量为执行一个函数体所消耗的资源量,目标树节点为多个树节点的部分树节点,对应的函数体为资源消耗量大于或等于第一阈值的函数体;基于第二函数调用树,监测电子设备使用数据时的资源消耗量。
6.第二方面,本技术实施例提供了一种电子设备的监测装置,其特征在于,所述电子设备的监测装置包括:获取模块、调整模块和监测模块。获取模块,用于获取第一函数调用树,该第一函数调用树包括多个树节点,每个树节点分别对应至少一个函数体中的一个函数体;至少一个函数体为使用数据时所调用的函数体。调整模块,用于根据多个树节点分别对应的资源消耗量,调整第一函数调用树,得到第二函数调用树,该第二函数调用树包括目标树节点,一个树节点对应的资源消耗量为执行一个函数体所消耗的资源量,目标树节点为多个树节点的部分树节点,对应的函数体为资源消耗量大于或等于第一阈值的函数体。监测模块,用于基于调整模块得到的第二函数调用树,监测电子设备使用数据时的资源消耗量。
7.第三方面,本技术实施例提供了一种电子设备,该电子设备包括处理器和存储器,所述存储器存储可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的方法的步骤。
8.第四方面,本技术实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的方法的步骤。
9.第五方面,本技术实施例提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现如第一方面所述的方法。
10.第六方面,本技术实施例提供一种计算机程序产品,该程序产品被存储在存储介质中,该程序产品被至少一个处理器执行以实现如第一方面所述的方法。
11.在本技术实施例中,电子设备可以获取第一函数调用树,该第一函数调用树包括多个树节点,每个树节点分别对应至少一个函数体中的一个函数体;该至少一个函数体为使用数据时所调用的函数体;然后电子设备可以根据多个树节点分别对应的资源消耗量,调整第一函数调用树,得到第二函数调用树,该第二函数调用树包括目标树节点,一个树节点对应的资源消耗量为执行一个函数体所消耗的资源量,该目标树节点为多个树节点的部分树节点,对应的函数体为资源消耗量大于或等于第一阈值的函数体;电子设备可以基于第二函数调用树,监测电子设备使用数据时的资源消耗量。本方案中,由于电子设备获取的第一函数调用树包括多个树节点,且每个树节点分别对应一个函数体,因此电子设备可以根据执行每个函数体所消耗的资源量,即每个树节点分别对应的资源消耗量,去除对应的资源消耗量小于第一阈值的树节点,以得到包括目标树节点的第二函数调用树,从而能够基于第二函数调用树,监测到使用数据时存在资源消耗异常的函数体。如此,提高了电子设备对使用数据时的资源消耗量的监测诊断结果的准确率。
附图说明
12.图1是本技术实施例提供的一种电子设备的监测方法的示意图;
13.图2是本技术实施例提供的一种建立函数调用树的实例示意图;
14.图3是本技术实施例提供的一种调整函数调用树的示例示意图之一;
15.图4是本技术实施例提供的一种调整函数调用树的示例示意图之二;
16.图5是本技术实施例提供的一种调整函数调用树的示例示意图之三;
17.图6是本技术实施例提供的一种电子设备的监测方法的流程示意图;
18.图7是本技术实施例提供的一种电子设备的监测装置的结构示意图;
19.图8是本技术实施例提供的一种电子设备的硬件结构示意图之一;
20.图9是本技术实施例提供的一种电子设备的硬件结构示意图之二。
具体实施方式
21.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员获得的所有其他实施例,都属于本技术保护的范围。
22.本技术的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,以便本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可
以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
23.下面结合附图,通过具体的实施例及其应用场景对本技术实施例提供的电子设备的监测方法进行详细地说明。
24.本技术实施例中的电子设备的监测方法可以应用于监测程序运行过程中的资源消耗量的场景。
25.随着电子设备的发展,程序产品的更新换代也越来越快,用户对程序的要求也随之增高,程序的系统流畅性、低内存消耗、低卡顿、快速启动等性能指标已经成为高质量产品重要的一环,因此,电子设备需要对程序的性能进行监控诊断,以使得后台开发人员可以根据诊断结果定位程序存在的问题。电子设备对程序执行耗时的诊断,依赖于函数执行调用及其耗时信息的收集,目前现有监控诊断技术有两大类,一类是在程序开发阶段,以调试(debug)模式对线程调用信息进行详细记录;另一类是在线上生产环境,当出现cpu执行耗时占用率过高后,抓取当时那一刻的调用栈信息。然而,现有的程序开发阶段的监控诊断技术,收集的调用信息过于庞大,性能损耗明显,不适合线上生产环境。而现有的基于生产环境的监控诊断技术,仅能收集到出现高cpu耗时问题后那一刻的调用栈信息,引发问题的调用可能过去一段时间了,这个调用栈信息具有滞后性,无法帮助开发者定位到根本原因,如此,电子设备对程序性能的监测诊断结果准确率较低。
26.在本技术实施例提供的方案中,电子设备可以获取第一函数调用树,该第一函数调用树包括多个树节点,每个树节点分别对应至少一个函数体中的一个函数体;该至少一个函数体为使用数据时所调用的函数体;然后电子设备可以根据多个树节点分别对应的资源消耗量,调整第一函数调用树,得到第二函数调用树,该第二函数调用树包括目标树节点,一个树节点对应的资源消耗量为执行一个函数体所消耗的资源量,该目标树节点为多个树节点的部分树节点,对应的函数体为资源消耗量大于或等于第一阈值的函数体;电子设备可以基于第二函数调用树,监测电子设备使用数据时的资源消耗量。本方案中,由于电子设备获取的第一函数调用树包括多个树节点,且每个树节点分别对应一个函数体,因此电子设备可以根据执行每个函数体所消耗的资源量,即每个树节点分别对应的资源消耗量,去除对应的资源消耗量小于第一阈值的树节点,以得到包括目标树节点的第二函数调用树,从而能够基于第二函数调用树,监测到使用数据时存在资源消耗异常的函数体。如此,提高了电子设备对使用数据时的资源消耗量的监测诊断结果的准确率。
27.本技术实施例提供一种电子设备的监测方法,图1示出了本技术实施例提供的一种电子设备的监测方法的流程图,该方法可以应用于电子设备。如图1所示,本技术实施例提供的电子设备的监测方法可以包括下述的步骤201至步骤203。
28.步骤201、电子设备获取第一函数调用树。
29.本技术实施例中,上述第一函数调用树包括多个树节点,每个树节点分别对应至少一个函数体中的一个函数体;至少一个函数体为使用数据时所调用的函数体。
30.可选地,本技术实施例中,上述数据可以用于指示一段代码,使用数据可以理解为执行该一段代码,该一段代码包括至少一个函数体。
31.可选地,本技术实施例中,上述步骤201具体可以通过下述的步骤201a和步骤201b实现。
32.步骤201a、在加载至少一个函数体的过程中,电子设备获取跟踪处理函数,并将跟踪处理函数插入到至少一个函数体中的每个函数体中。
33.可选地,本技术实施例中,加载至少一个函数体的过程可以理解为代码的编译过程。
34.可以理解,代码编译完成之后,电子设备能够运行该代码。
35.可选地,本技术实施例中,电子设备可以将跟踪处理函数插入到每个函数体中的预设位置。
36.示例性地,上述跟踪处理函数可以为预先编写好的跟踪处理函数。
37.示例性地,电子设备可以将跟踪处理函数插入到每个函数体的开头、结尾和函数返回前。
38.步骤201b、电子设备基于至少一个函数体和跟踪处理函数,建立第一函数调用树。
39.本技术实施例中,上述跟踪处理函数用于记录使用数据时执行各个函数体所消耗的资源量。
40.可选地,本技术实施例中,每个函数体包括至少一个函数;在上述步骤201b之前,本技术实施例提供的电子设备的监测方法还包括下述的步骤301。
41.步骤301、在加载至少一个函数体的过程中,电子设备为至少一个函数体中的每个函数体包括的所有函数分配一个函数标识,得到每个函数体的函数标识。
42.可选地,本技术实施例中,电子设备可以通过自动化编译脚本,为至少一个函数体中的每个函数体包括的所有函数分配一个函数标识,得到每个函数体的函数标识。
43.示例性地,在加载至少一个函数体的过程中,电子设备可以通过自动化编译脚本,扫描每一个函数,并为每一个函数分配一个唯一的函数标识;可以理解的是,由于一个函数对应一个函数体,因此可以得到每个函数体的函数标识。然后,在任意函数体中执行跟踪处理函数时,可以将被跟踪的函数(即任意函数体对应的函数)的函数标识传递给跟踪处理函数。
44.示例性地,电子设备可以声明一个全局的整数(integer)变量,用自增的方式为每一个函数生成唯一函数标识。
45.可选地,本技术实施例中,上述步骤201b具体可以通过下述的步骤201b1至步骤201b3实现。
46.步骤201b1、电子设备针对至少一个函数体中的每个函数体,在开始执行函数体的情况下,基于函数体的函数标识,建立函数体对应的树节点,并在结束执行函数体的情况下,将执行函数体所消耗的资源量映射到函数体对应的树节点。
47.可以理解,在一个函数体中的语句开始执行,即一个函数体开始执行的情况下,电子设备可以基于该函数体的函数标识,建立与该函数体对应的树节点,并在该函数体中的语句执行完成的情况下,将执行该函数体时所消耗的资源量映射到该函数体对应的树节点。
48.可选地,本技术实施例中,上述跟踪处理函数包括开始跟踪处理函数和结束跟踪处理函数;上述步骤201b1中的“在开始执行函数体的情况下,基于函数体的函数标识,建立函数体对应的树节点,并在结束执行函数体的情况下,将执行函数体所消耗的资源量映射到函数体对应的树节点”具体可以通过下述的步骤401至步骤405实现。
49.步骤401、在开始执行函数体的情况下,电子设备通过开始跟踪处理函数,记录开始执行函数体时的第一资源信息,并根据函数体的函数标识构造函数体对应的树节点。
50.可选地,本技术实施例中,在任意一个函数体开始执行,即一个函数体中的开始跟踪处理函数被执行时,可以向开始跟踪处理函数传递被跟踪的函数的函数标识,即该函数体的函数标识,使得电子设备可以通过开始跟踪处理函数,记录开始执行该任意一个函数体时的第一资源信息。
51.示例性地,电子设备可以根据任意一个函数体的函数标识构造该函数体对应的树节点。
52.示例性地,上述第一资源信息可以包括以下至少一项:函数体开始执行时的时间、内存占用、流量消耗、电量消耗等。
53.示例性地,上述开始跟踪处理函数可以为methodpulse.i()。
54.步骤402、电子设备将函数体对应的树节点添加至初始函数调用树中,得到第三函数调用树。
55.可选地,本技术实施例中,电子设备可以根据函数体的函数标识,在当前线程的内存缓存中查看是否已有函数调用树,如果已有则取出来,否则新建一个函数调用树(即初始函数调用树)并保存在当前线程的缓存中。
56.示例性地,电子设备可以将构造的与函数体对应的树节点添加到初始函数调用树中,以得到第三函数调用树,并标记这个树节点为当前正在执行的节点。
57.步骤403、在结束执行函数体的情况下,电子设备通过结束跟踪处理函数,记录结束执行函数体时的第二资源信息。
58.可选地,本技术实施例中,在任意一个函数体结束执行前(如return返回值或抛出异常),电子设备可以先执行结束跟踪处理函数,并向结束跟踪处理函数传递被跟踪的函数的函数标识,即该函数体的函数标识,使得该任意一个函数体结束执行时,电子设备可以通过开始跟踪处理函数,记录结束执行该函数体时的第二资源信息。
59.示例性地,上述第二资源信息可以包括以下至少一项:函数体结束执行时的时间、内存占用、流量消耗、电量消耗等。
60.示例性地,上述结束跟踪处理函数可以为methodpulse.o()。
61.步骤404、电子设备根据第一资源信息和第二资源信息,确定执行函数体所消耗的资源量。
62.可选地,本技术实施例中,电子设备可以根据记录的开始执行该任意一个函数体时的第一资源信息和结束执行该任意一个函数体时的第二资源信息的差值,计算出执行该任意一个函数体时所消耗的资源量。
63.可选地,本技术实施例中,上述函数体消耗的资源量可以包括以下至少一项:当前的线程耗时、内存占用、流量消耗、电量消耗、执行次数等。
64.步骤405、电子设备根据函数体的函数标识,将第三函数调用树中的函数体对应的树节点更新为执行函数体所消耗的资源量。
65.可选地,本技术实施例中,电子设备可以根据函数体的函数标识,从第三函数调用树中找到与该函数体对应的树节点,然后将该树节点更新为执行该函数体所消耗的资源量,或者可以理解为将执行该函数体所消耗的资源量保存到对应的树节点。
66.示例性地,电子设备将第三函数调用树中的函数体对应的树节点更新为执行函数体所消耗的资源量之后,可以标记这个树节点的执行状态为已完成。
67.示例性地,每个树节点的信息表示为:逗号前的为与函数体对应的函数的函数标识,即函数体的函数标识,逗号后为消耗的资源量,
‑‑
表示函数仍在调用中,未结束执行,即函数体未结束运行。
68.举例说明,以资源消耗量为cpu累计耗时为例进行说明,如图2所示,根节点对应的函数标识为calltree1,第一层包括一个子节点,该一个子节点对应的函数标识为run();第二层包括两个子节点,第一个子节点对应的函数标识为call1(),执行该子节点的cpu累计耗时为4秒,第二个子节点对应的函数标识为call2(),该子节点对应的函数体仍在运行;第三层包括四个子节点,第一个子节点对应的函数标识为call1.1(),执行该子节点的cpu累计耗时为2.5秒,第二个子节点对应的函数标识为call1.2(),执行该子节点的cpu累计耗时为700毫秒,第三个子节点对应的函数标识为call1.3(),执行该子节点的cpu累计耗时为800毫秒,
……

69.步骤201b2、电子设备遍历至少一个函数体中的所有函数体,得到所有函数体分别对应的树节点,以及所有函数体分别对应的树节点上映射的资源量。
70.可选地,本技术实施例中,在一个函数体中包括其他函数体时,只有在包括的其他函数体结束执行的情况下,该一个函数体才算结束执行,从而才能获取执行该一个函数体时所消耗的资源量。
71.步骤201b3、电子设备基于所有函数体分别对应的树节点,以及所有函数体分别对应的树节点上映射的资源量,得到第一函数调用树。
72.可以理解,电子设备可以构建与所有函数体对应的树节点,并在分别得到执行每个函数体所消耗的资源量后,将执行每个函数体所消耗的资源量分别映射到对应的树节点,以得到第一函数调用树。
73.步骤202、电子设备根据多个树节点分别对应的资源消耗量,调整第一函数调用树,得到第二函数调用树。
74.本技术实施例中,上述第二函数调用树包括目标树节点,一个树节点对应的资源消耗量为执行一个函数体所消耗的资源量,目标树节点为多个树节点的部分树节点,对应的函数体为资源消耗量大于或等于第一阈值的函数体。
75.可选地,本技术实施例中,上述目标树节点对应的函数体为存在高资源消耗问题的函数体。
76.可以理解,电子设备可以根据多个树节点分别对应的资源消耗量,将未存在高资源消耗问题的函数体(即资源消耗量小于第一阈值的函数体)对应的树节点裁剪掉,只留下存在高资源消耗问题的函数体对应的树节点,即目标树节点。
77.可选地,本技术实施例中,上述步骤202具体可以通过下述的步骤202a或步骤202b实现。
78.步骤202a、电子设备根据跟踪处理函数,获取多个树节点分别对应的资源消耗量。
79.可以理解,电子设备可以根据跟踪处理函数记录的开始执行函数体时的第一资源信息和结束执行函数体时的第二资源信息的差值,计算出执行函数体时所消耗的资源量,从而得到多个树节点分别对应的资源消耗量。
80.步骤202b、电子设备根据资源消耗量,调整第一函数调用树,得到第二函数调用树。
81.可以理解,电子设备可以根据多个树节点分别对应的资源消耗量,将资源消耗量小于第一阈值的函数体对应的树节点裁剪掉,只留下资源消耗量大于第一阈值的函数体(即存在高资源消耗问题的函数体)对应的树节点,即目标树节点,从而得到第二函数调用树。
82.可选地,本技术实施例中,上述步骤202具体可以通过下述的步骤202c或步骤202d至步骤202f实现。
83.步骤202c、在第一函数调用树中的任意树节点对应的函数体最后一次结束执行的时间与当前时间之间的差值大于或等于第二阈值的情况下,电子设备调整第一函数调用树,得到第二函数调用树。
84.可选地,本技术实施例中,电子设备可以先判断距离上次调整,是否已超过了预设时长,例如50秒,若超过预设时长,则开始调整第一函数调用树。
85.示例性地,由于在使用数据时,会有新函数执行,因此函数调用树在不断的构建,所以电子设备需要定期检查函数调用树是否需要清理。
86.示例性地,上述预设时长可以通过配置文件进行配置。
87.可以理解,在第一函数调用树中的任意树节点对应的函数体最后一次结束执行的时间与当前时间之间的差值大于或等于第二阈值时,例如50秒,由于间隔时间较长,所以电子设备可以直接裁剪该任意树节点,即调整第一函数调用树,得到第二函数调用树。
88.步骤202d、在任意树节点对应的函数体最后一次结束执行的时间与当前时间之间的差值小于第二阈值、且大于或等于第三阈值的情况下,电子设备基于数据对应的线程的保留阈值和线程的历史资源消耗量,确定第一函数调用树中的根节点的保留阈值。
89.本技术实施例中,上述线程的保留阈值为使用数据时线程对应的资源消耗的最大门限值,第二阈值大于第三阈值。
90.可选地,本技术实施例中,在第一函数调用树中的任意树节点对应的函数体最后一次结束执行的时间与当前时间之间的差值小于第二阈值时,则进一步判断第一函数调用树中的任意树节点对应的函数体最后一次结束执行的时间与当前时间之间的差值是否大于或等于第三阈值,例如10秒。
91.可选地,本技术实施例中,上述线程的保留阈值为电子设备预先设置的。
92.可选地,本技术实施例中,电子设备可以计算线程的前m条历史资源消耗量的p分位值,然后比较线程的保留阈值和线程的前m条历史资源消耗量的p分位值,将数值较大的作为根节点的保留阈值。
93.示例性地,根节点的保留阈值的计算方式如下:
94.t0=t
root
=max(t
config
,percentile([t1,t2,...tm],p%))
[0095]
其中,t
root
为根节点的保留阈值;t
config
为线程的保留阈值;percentile([t1,t2,

tm],p%)为线程的前m条历史资源消耗量的p分位值。
[0096]
举例说明,以资源消耗量为cpu累计耗时为例进行说明,假设线程预先配置的保留阈值为6s,线程前10条历史资源消耗量为[3.1,4.2,5.5,5.8,3,4.3,4,3.5,3,3],计算其80分位值为4.54s,则根节点的保留阈值为max(4.54s,6s)=6秒。
[0097]
步骤202e、电子设备根据剩余树节点中每个树节点的父节点的保留阈值或资源消耗量,确定剩余树节点中每个树节点的保留阈值。
[0098]
本技术实施例中,上述剩余树节点为第一函数调用树中除根节点之外的节点。
[0099]
第一种情况:电子设备根据剩余树节点中每个树节点的父节点的保留阈值,确定剩余树节点中每个树节点的保留阈值。
[0100]
可选地,本技术实施例中,电子设备确定第一函数调用树中的根节点的保留阈值之后,可以自顶向下计算,当前层级的树节点的保留阈值都是其父节点的保留阈值的均分。
[0101]
示例性地,第i层级的树节点的保留阈值的计算方式如下:
[0102][0103]
其中,ti为第一函数调用树中第i层树节点的保留阈值;t
i-1
为第i层节点的父节点的保留阈值;n为当前树节点的兄弟节点数量(包括当前树节点)。
[0104]
举例说明,以资源消耗量为cpu累计耗时为例进行说明,如图3所示,树节点中|符号前面为树节点的cpu累计耗时,后面为该树节点的保留阈值。假设根节点的保留阈值为6秒,自顶向下计算,如第1层子节点,只有1个,因此该层树节点的保留阈值为6/1=6秒;第2层子节点有2个,因此第2层的树节点的保留阈值为6/2=3秒;第3层子节点有4个,其中3个“call1.1()、call1.2()、call1.3()”为兄弟节点,由于其三个子节点的父节点的保留阈值为3秒,因此这三个子节点的保留阈值为3/3=1秒;其中一个“call2.1()”的父节点的保留阈值为3秒,因此这一个子节点的保留阈值为3/1=3秒;其它的树节点计算,以此类推。
[0105]
可以理解,电子设备以配额制的方式将保留阈值划分给各个子层级的节点;一方面,若所有树节点的保留阈值都是统一固定的值,会导致过度裁剪,即把目标树节点也裁剪清理掉了,因为随着层级深入、子节点数量的增多,子节点资源量消耗的因素可能被分散,子节点消耗量肯定会小于父节点的消耗量,如果不将保留阈值降低,有问题的树节点将得不到保留;另一方面,上层节点的消耗值由于大于固定阈值而保留,而它在同一层级中的权重可能并不大。
[0106]
例如:当前层级有三个树节点,对应的资源消耗量为6秒、7秒、50秒,在固定阈值为6秒的情况下,该三个树节点都将保留,然后对应的资源消耗量为6秒和7秒的树节点在当前层级中的影响并不大。
[0107]
第二种情况:电子设备根据剩余树节点中每个树节点的父节点的资源消耗量,确定剩余树节点中每个树节点的保留阈值。
[0108]
可选地,本技术实施例中,电子设备确定第一函数调用树中的根节点的保留阈值之后,可以自顶向下遍历树找到第一个已完成的树节点,其保留阈值与根节点的保留阈值相同。
[0109]
可选地,本技术实施例中,除根节点和第一个已完成树节点之外的树节点,每一层级的树节点的保留阈值都是其父节点的历史资源消耗量的均分。
[0110]
示例性地,第i层级的树节点的保留阈值的计算方式如下:
[0111]
[0112]
其中,ti为第一函数调用树中第i层树节点的保留阈值;n为当前树节点的兄弟节点数量(包括当前树节点);t
i-1
为第i层节点的父节点的实际资源消耗量。
[0113]
举例说明,以资源消耗量为cpu累计耗时为例进行说明,如图4所示,树节点中|符号前面为树节点的cpu累计耗时,后面为该树节点的保留阈值。如第3层的“call1.3(),11s”节点的保留阈值,可以先取得其父节点的cpu累计耗时为49s,兄弟节点数量为3,则该树节点的保留阈值为49/3,约为16.3s;其它的树节点计算,以此计算。
[0114]
可选地,本技术实施例中,电子设备可以使用分位值计算法计算各个层级的树节点的保留阈值。
[0115]
可以理解,每一层节点中,资源消耗量小于保留阈值的树节点,其引起问题的权重远没有其他树节点高,因此保留阈值的计算可基于父节点的资源消耗量,将相对不重要的树节点裁剪清理。
[0116]
步骤202f、在任意树节点对应的资源消耗量小于或等于任意树节点的保留阈值的情况下,电子设备调整第一函数调用树,得到第二函数调用树。
[0117]
可以理解,将一个树节点对应的资源消耗量(例如:cpu累计耗时)与该树节点的保留阈值进行比较,若该树节点对应的资源消耗量小于该树节点的保留阈值,则确定该树节点不是问题节点,可清理,待裁剪清理线程执行清理。
[0118]
示例性地,裁剪任意树节点时,需要将该任意树节点及其子孙节点从父节点中脱离。
[0119]
如此,由于只留下问题树节点,即目标树节点,从而减少了内存占用。
[0120]
举例说明,如图4所示,边框加粗的树节点即表示该树节点对应的资源消耗量小于或等于任意树节点的保留阈值,电子设备需要裁剪该树节点。
[0121]
举例说明,结合图4,电子设备将没有问题的树节点进行裁剪,如图5所示,调整后的第一函数调用树只包含目标树节点,从而得到第二函数调用树。
[0122]
可选地,本技术实施例中,在第一函数调用树中的任意树节点对应的函数体最后一次完成运行的时间与当前时间之间的差值小于第二阈值、且小于第三阈值时,电子设备保留该任意树节点。
[0123]
示例性地,电子设备在确定裁剪任意树节点或保留任意树节点之后,可以按照预设顺序判断下一个树节点是否需要裁剪。
[0124]
示例性地,上述预设顺序可以为先兄弟节点,后子节点。
[0125]
示例性地,电子设备调整第一函数调用树时,可以从根节点开始执行裁剪逻辑,将根节点标记为当前节点,先检查当前节点是否符合裁剪条件,即当前节点是否被标记为执行完成,如果否,则说明对应的函数体还在执行中,此时则在第一函数调用树中寻找下一个节点,寻找顺序为先兄弟节点,后子节点;然后,在下一个节点符合裁剪逻辑时,电子设备判断是否裁剪该节点,即执行上述步骤202c或步骤202d至步骤202f。
[0126]
步骤203、电子设备基于第二函数调用树,对电子设备使用数据时的资源消耗量进行监测。
[0127]
可以理解,第二函数调用树中包括的目标树节点为存在高资源消耗问题的函数体对应的树节点,因此,电子设备可以根据第二函数调用树,确定存在高资源消耗问题的函数体,即对电子设备使用数据时的资源消耗量进行监测。
[0128]
本技术实施例提供一种电子设备的监测方法,电子设备可以获取第一函数调用树,该第一函数调用树包括多个树节点,每个树节点分别对应至少一个函数体中的一个函数体;该至少一个函数体为使用数据时所调用的函数体;然后电子设备可以根据多个树节点分别对应的资源消耗量,调整第一函数调用树,得到第二函数调用树,该第二函数调用树包括目标树节点,一个树节点对应的资源消耗量为执行一个函数体所消耗的资源量,该目标树节点为多个树节点的部分树节点,对应的函数体为资源消耗量大于或等于第一阈值的函数体;电子设备可以基于第二函数调用树,监测电子设备使用数据时的资源消耗量。本方案中,由于电子设备获取的第一函数调用树包括多个树节点,且每个树节点分别对应一个函数体,因此电子设备可以根据执行每个函数体所消耗的资源量,即每个树节点分别对应的资源消耗量,去除对应的资源消耗量小于第一阈值的树节点,以得到包括目标树节点的第二函数调用树,从而能够基于第二函数调用树,监测到使用数据时存在资源消耗异常的函数体。如此,提高了电子设备对使用数据时的资源消耗量的监测诊断结果的准确率。
[0129]
本技术实施例中,如图6所示,本技术实施例提供的电子设备的监测方法可以包括下述的步骤s1至步骤s10。
[0130]
步骤s1、电子设备开始裁剪第一函数调用树。
[0131]
步骤s2、电子设备判断距离上次裁剪,是否已超过了预设时长。
[0132]
若是,执行步骤s3,否则,电子设备结束裁剪。
[0133]
步骤s3、电子设备从根节点开始,检查树节点是否符合裁剪条件。
[0134]
若是,执行步骤s4,否则,执行步骤s6。
[0135]
步骤s4、电子设备判断当前树节点是否被标记完成调用。
[0136]
若是,执行步骤s5,否则,执行步骤s6。
[0137]
步骤s5、电子设备判断当前树节点对应的函数体最后一次完成运行的时间与当前时间之间的差值是否小于第二阈值。
[0138]
若是,执行步骤s7,否则,执行步骤s8。
[0139]
步骤s6、电子设备寻找下一个树节点。
[0140]
步骤s7、电子设备判断当前树节点对应的函数体最后一次完成运行的时间与当前时间之间的差值是否小于第三阈值。
[0141]
若是,执行步骤s6,否则,执行步骤s9。
[0142]
步骤s8、电子设备对当前树节点及其子节点执行裁剪。
[0143]
步骤s9、电子设备计算当前树节点的保留阈值。
[0144]
步骤s10、电子设备判断当前树节点的资源消耗量是否超过保留阈值。
[0145]
若是,执行步骤s8,否则,执行步骤s6。
[0146]
需要说明的是,本技术实施例提供的电子设备的监测方法,执行主体可以为电子设备的监测装置。本技术实施例中以电子设备的监测装置执行电子设备的监测方法为例,说明本技术实施例提供的电子设备的监测装置。
[0147]
图7示出了本技术实施例中涉及的电子设备的监测装置的一种可能的结构示意图。如图7所示,该电子设备的监测装置70可以包括:获取模块71、调整模块72和监测模块73。获取模块71,用于获取第一函数调用树,该第一函数调用树包括多个树节点,每个树节点分别对应至少一个函数体中的一个函数体;该至少一个函数体为使用数据时所调用的函
数体。调整模块,用于根据多个树节点分别对应的资源消耗量,调整第一函数调用树,得到第二函数调用树,该第二函数调用树包括目标树节点,一个树节点对应的资源消耗量为执行一个函数体所消耗的资源量,目标树节点为多个树节点的部分树节点,对应的函数体为资源消耗量大于或等于第一阈值的函数体。监测模块,用于基于调整模块得到的第二函数调用树,监测电子设备使用数据时的资源消耗量。
[0148]
本技术实施例提供一种电子设备的监测装置,由于电子设备的监测装置获取的第一函数调用树包括多个树节点,且每个树节点分别对应一个函数体,因此电子设备的监测装置可以根据执行每个函数体所消耗的资源量,即每个树节点分别对应的资源消耗量,去除对应的资源消耗量小于第一阈值的树节点,以得到包括目标树节点的第二函数调用树,从而能够基于第二函数调用树,监测到使用数据时存在资源消耗异常的函数体。如此,提高了电子设备的监测装置对使用数据时的资源消耗量的监测诊断结果的准确率。
[0149]
在一种可能的实现方式中,本技术实施例提供的电子设备的监测装置70还包括:处理模块。处理模块,用于在加载至少一个函数体的过程中,获取跟踪处理函数,并将跟踪处理函数插入到至少一个函数体中的每个函数体中。获取模块71,具体用于基于至少一个函数体和跟踪处理函数,建立第一函数调用树,该跟踪处理函数用于记录使用数据时执行各个函数体所消耗的资源量。获取模块71,还用于根据跟踪处理函数,获取多个树节点分别对应的资源消耗量。调整模块72,具体用于根据获取模块71获取的资源消耗量,调整第一函数调用树,得到第二函数调用树。
[0150]
在一种可能的实现方式中,每个函数体包括至少一个函数;处理模块,还用于在获取模块71基于至少一个函数体和跟踪处理函数,建立第一函数调用树之前,在加载至少一个函数体的过程中,为至少一个函数体中的每个函数体包括的所有函数分配一个函数标识,得到每个函数体的函数标识;并针对至少一个函数体中的每个函数体,在开始执行函数体的情况下,基于函数体的函数标识,建立函数体对应的树节点,并在结束执行函数体的情况下,将执行函数体所消耗的资源量映射到函数体对应的树节点;以及遍历至少一个函数体中的所有函数体,得到所有函数体分别对应的树节点,以及所有函数体分别对应的树节点上映射的资源量。获取模块71,具体用于基于所有函数体分别对应的树节点,以及所有函数体分别对应的树节点上映射的资源量,得到第一函数调用树。
[0151]
在一种可能的实现方式中,跟踪处理函数包括开始跟踪处理函数和结束跟踪处理函数;处理模块,具体用于在开始执行函数体的情况下,通过开始跟踪处理函数,记录开始执行函数体时的第一资源信息,并根据函数体的函数标识构造函数体对应的树节点;并将函数体对应的树节点添加至初始函数调用树中,得到第三函数调用树;并在结束执行函数体的情况下,通过结束跟踪处理函数,记录结束执行函数体时的第二资源信息;并根据第一资源信息和第二资源信息,确定执行函数体所消耗的资源量;以及根据函数体的函数标识,将第三函数调用树中的函数体对应的树节点更新为执行函数体所消耗的资源量。
[0152]
在一种可能的实现方式中,调整模块72,具体用于在第一函数调用树中的任意树节点对应的函数体最后一次结束执行的时间与当前时间之间的差值大于或等于第二阈值的情况下,调整第一函数调用树,得到第二函数调用树;或者,在任意树节点对应的函数体最后一次结束执行的时间与当前时间之间的差值小于第二阈值、且大于或等于第三阈值的情况下,基于数据对应的线程的保留阈值和线程的历史资源消耗量,确定第一函数调用树
中的根节点的保留阈值,线程的保留阈值为使用数据时线程对应的资源消耗的最大门限值,第二阈值大于第三阈值;并根据剩余树节点中每个树节点的父节点的保留阈值或资源消耗量,确定剩余树节点中每个树节点的保留阈值,剩余树节点为第一函数调用树中除根节点之外的节点;以及在任意树节点对应的资源消耗量小于或等于任意树节点的保留阈值的情况下,调整第一函数调用树,得到第二函数调用树。
[0153]
本技术实施例中的电子设备的监测装置可以是电子设备,也可以是电子设备中的部件,例如集成电路或芯片。该电子设备可以是终端,也可以为除终端之外的其他设备。示例性的,电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、移动上网装置(mobile internet device,mid)、增强现实(augmented reality,ar)/虚拟现实(virtual reality,vr)设备、机器人、可穿戴设备、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本或者个人数字助理(personal digital assistant,pda)等,还可以为服务器、网络附属存储器(network attached storage,nas)、个人计算机(personal computer,pc)、电视机(television,tv)、柜员机或者自助机等,本技术实施例不作具体限定。
[0154]
本技术实施例中的电子设备的监测装置可以为具有操作系统的装置。该操作系统可以为安卓(android)操作系统,可以为ios操作系统,还可以为其他可能的操作系统,本技术实施例不作具体限定。
[0155]
本技术实施例提供的电子设备的监测装置能够实现上述方法实施例实现的各个过程,为避免重复,这里不再赘述。
[0156]
可选地,如图8所示,本技术实施例还提供一种电子设备900,包括处理器901和存储器902,存储器902上存储有可在所述处理器901上运行的程序或指令,该程序或指令被处理器901执行时实现上述方法实施例的各个步骤,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0157]
需要说明的是,本技术实施例中的电子设备包括上述所述的移动电子设备和非移动电子设备。
[0158]
图9为实现本技术实施例的一种电子设备的硬件结构示意图。
[0159]
该电子设备100包括但不限于:射频单元101、网络模块102、音频输出单元103、输入单元104、传感器105、显示单元106、用户输入单元107、接口单元108、存储器109、以及处理器110等部件。
[0160]
本领域技术人员可以理解,电子设备100还可以包括给各个部件供电的电源(比如电池),电源可以通过电源管理系统与处理器110逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。图9中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,在此不再赘述。
[0161]
其中,处理器110,用于获取第一函数调用树,该第一函数调用树包括多个树节点,每个树节点分别对应至少一个函数体中的一个函数体;该至少一个函数体为使用数据时所调用的函数体。并根据多个树节点分别对应的资源消耗量,调整第一函数调用树,得到第二函数调用树,该第二函数调用树包括目标树节点,一个树节点对应的资源消耗量为执行一个函数体所消耗的资源量,目标树节点为多个树节点的部分树节点,对应的函数体为资源
消耗量大于或等于第一阈值的函数体。以及基于第二函数调用树,监测电子设备使用数据时的资源消耗量。
[0162]
本技术实施例提供一种电子设备,由于电子设备获取的第一函数调用树包括多个树节点,且每个树节点分别对应一个函数体,因此电子设备可以根据执行每个函数体所消耗的资源量,即每个树节点分别对应的资源消耗量,去除对应的资源消耗量小于第一阈值的树节点,以得到包括目标树节点的第二函数调用树,从而能够基于第二函数调用树,监测到使用数据时存在资源消耗异常的函数体。如此,提高了电子设备对使用数据时的资源消耗量的监测诊断结果的准确率。
[0163]
可选地,处理器110,用于在加载至少一个函数体的过程中,获取跟踪处理函数,并将跟踪处理函数插入到至少一个函数体中的每个函数体中。
[0164]
处理器110,具体用于基于至少一个函数体和跟踪处理函数,建立第一函数调用树,该跟踪处理函数用于记录使用数据时执行各个函数体所消耗的资源量。
[0165]
处理器110,还用于根据跟踪处理函数,获取多个树节点分别对应的资源消耗量。
[0166]
处理器110,具体用于根据资源消耗量,调整第一函数调用树,得到第二函数调用树。
[0167]
可选地,每个函数体包括至少一个函数;处理器110,还用于在基于至少一个函数体和跟踪处理函数,建立第一函数调用树之前,在加载至少一个函数体的过程中,为至少一个函数体中的每个函数体包括的所有函数分配一个函数标识,得到每个函数体的函数标识;并针对至少一个函数体中的每个函数体,在开始执行函数体的情况下,基于函数体的函数标识,建立函数体对应的树节点,并在结束执行函数体的情况下,将执行函数体所消耗的资源量映射到函数体对应的树节点;以及遍历至少一个函数体中的所有函数体,得到所有函数体分别对应的树节点,以及所有函数体分别对应的树节点上映射的资源量。
[0168]
处理器110,具体用于基于所有函数体分别对应的树节点,以及所有函数体分别对应的树节点上映射的资源量,得到第一函数调用树。
[0169]
可选地,跟踪处理函数包括开始跟踪处理函数和结束跟踪处理函数;处理器110,具体用于在开始执行函数体的情况下,通过开始跟踪处理函数,记录开始执行函数体时的第一资源信息,并根据函数体的函数标识构造函数体对应的树节点;并将函数体对应的树节点添加至初始函数调用树中,得到第三函数调用树;并在结束执行函数体的情况下,通过结束跟踪处理函数,记录结束执行函数体时的第二资源信息;并根据第一资源信息和第二资源信息,确定执行函数体所消耗的资源量;以及根据函数体的函数标识,将第三函数调用树中的函数体对应的树节点更新为执行函数体所消耗的资源量。
[0170]
可选地,处理器110,具体用于在第一函数调用树中的任意树节点对应的函数体最后一次结束执行的时间与当前时间之间的差值大于或等于第二阈值的情况下,调整第一函数调用树,得到第二函数调用树;或者,在任意树节点对应的函数体最后一次结束执行的时间与当前时间之间的差值小于第二阈值、且大于或等于第三阈值的情况下,基于数据对应的线程的保留阈值和线程的历史资源消耗量,确定第一函数调用树中的根节点的保留阈值,线程的保留阈值为使用数据时线程对应的资源消耗的最大门限值,第二阈值大于第三阈值;并根据剩余树节点中每个树节点的父节点的保留阈值或资源消耗量,确定剩余树节点中每个树节点的保留阈值,剩余树节点为第一函数调用树中除根节点之外的节点;以及
在任意树节点对应的资源消耗量小于或等于任意树节点的保留阈值的情况下,调整第一函数调用树,得到第二函数调用树。
[0171]
本技术实施例提供的电子设备能够实现上述方法实施例实现的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0172]
本实施例中各种实现方式具有的有益效果具体可以参见上述方法实施例中相应实现方式所具有的有益效果,为避免重复,此处不再赘述。
[0173]
应理解的是,本技术实施例中,输入单元104可以包括图形处理器(graphics processing unit,gpu)1041和麦克风1042,图形处理器1041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。显示单元106可包括显示面板1061,可以采用液晶显示器、有机发光二极管等形式来配置显示面板1061。用户输入单元107包括触控面板1071以及其他输入设备1072中的至少一种。触控面板1071,也称为触摸屏。触控面板1071可包括触摸检测装置和触摸控制器两个部分。其他输入设备1072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。
[0174]
存储器109可用于存储软件程序以及各种数据。存储器109可主要包括存储程序或指令的第一存储区和存储数据的第二存储区,其中,第一存储区可存储操作系统、至少一个功能所需的应用程序或指令(比如声音播放功能、图像播放功能等)等。此外,存储器109可以包括易失性存储器或非易失性存储器,或者,存储器109可以包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),静态随机存取存储器(static ram,sram)、动态随机存取存储器(dynamic ram,dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data rate sdram,ddrsdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synch link dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,drram)。本技术实施例中的存储器109包括但不限于这些和任意其它适合类型的存储器。
[0175]
处理器110可包括一个或多个处理单元;可选的,处理器110集成应用处理器和调制解调处理器,其中,应用处理器主要处理涉及操作系统、用户界面和应用程序等的操作,调制解调处理器主要处理无线通信信号,如基带处理器。可以理解的是,上述调制解调处理器也可以不集成到处理器110中。
[0176]
本技术实施例还提供一种可读存储介质,所述可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0177]
其中,所述处理器为上述实施例中所述的电子设备中的处理器。所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器rom、随机存取存储器ram、磁碟或者光盘等。
[0178]
本技术实施例另提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现上述方法实施例的各个过程,
且能达到相同的技术效果,为避免重复,这里不再赘述。
[0179]
应理解,本技术实施例提到的芯片还可以称为系统级芯片、系统芯片、芯片系统或片上系统芯片等。
[0180]
本技术实施例提供一种计算机程序产品,该程序产品被存储在存储介质中,该程序产品被至少一个处理器执行以实现如上述方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0181]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本技术实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
[0182]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例所述的方法。
[0183]
上面结合附图对本技术的实施例进行了描述,但是本技术并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本技术的启示下,在不脱离本技术宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本技术的保护之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1