一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

函数执行性能监测方法、装置、计算机设备及存储介质与流程

2021-11-05 20:56:00 来源:中国专利 TAG:


1.本公开涉及信息处理技术领域,特别是涉及一种函数执行性能监测方法、装置、计算机设备及存储介质。


背景技术:

2.目前,在运行应用程序的过程中,可能出现由于应用程序中调用的方法或者函数执行错误导致应用程序无法正常运行的问题,所以开发人员需要确定执行不正常的函数或者方法,针对性的解决问题。
3.在相关技术中,通过“埋点”的方式,对函数进行硬编码,追踪和记录的进行硬编码的函数的执行情况,包括记录该函数的开始执行时间以及结束执行时间,通过计算二者的差值确定该函数的执行时间,并把实时计算的函数执行时间传送到后台或者客户端。开发人员通过反馈的执行时间判断该函数是否正常执行。
4.然而,相关技术中的方案,通过硬编码的方式记录函数的执行时间需要对函数进行“埋点”才能获取到该函数的执行时间,在应用程序运行的过程中需要调用大量函数,为了全面的检测应用程序运行过程,需要增加“埋点”的粒度,而大量“埋点”导致中央处理器(central processing unit,cpu)、内存等系统资源消耗过大。


技术实现要素:

5.本公开提供一种函数执行性能监测方法、装置、计算机设备及存储介质。所述技术方案如下:
6.一方面,提供了一种函数执行性能监测方法,所述方法包括:
7.获取目标线程栈在各个时间点上的堆栈信息数据;所述目标线程栈是目标应用程序运行过程中的线程栈;所述堆栈信息数据用于指示所述目标应用程序在对应的时间点上调用的函数;
8.根据所述各个时间点上的堆栈信息数据,确定所述目标线程栈中的各个函数的执行时间;
9.根据所述各个函数的执行时间,获取所述各个函数的执行性能信息,所述执行性能信息用于指示对应的函数是否执行异常。
10.在一种可能的实现方式中,所述获取目标线程栈在各个时间点上的堆栈信息数据,包括:
11.获取指定配置信息,所述指定配置信息包含获取所述堆栈信息数据的采集时间区间、采集频率以及采集函数范围中的至少一个;
12.根据指定配置信息,获取所述目标线程栈在各个时间点上的所述堆栈信息数据。
13.在一种可能的实现方式中,所述获取目标线程栈在各个时间点上的堆栈信息数据,包括:
14.在所述采集时间区间内,按照所述采集频率获取所述目标线程栈中属于所述采集
函数范围的堆栈信息数据;
15.所述根据所述各个时间点上的堆栈信息数据,确定所述目标线程栈中的各个函数的执行时间,包括:
16.确定所述堆栈信息数据相同的连续的所述堆栈信息数据采集数量;所述堆栈信息数据相同是指位于所述目标线程栈顶部的栈帧相同以及所述目标线程栈中的各个栈帧内容相同;
17.将连续时间区间获取为所述目标函数的执行时间;所述连续时间区间是连续的所述堆栈信息数据采集数量减一后与所述采集频率的乘积。
18.在一种可能的实现方式中,所述根据指定配置信息,获取所述目标线程栈在各个时间点上的堆栈信息数据,包括:
19.获取所述目标应用程序对应的目标属性信息;所述目标属性信息包含目标应用标识、目标应用优先等级以及目标应用接口请求时延中的至少一种;
20.获取所述目标属性信息对应的所述指定配置信息;
21.根据所述指定配置信息,获取所述目标线程栈在各个时间点上的所述堆栈信息数据。
22.在一种可能的实现方式中,响应于所述目标属性信息包含所述目标应用标识;
23.所述获取所述目标属性信息对应的所述指定配置信息,包括:
24.获取所述目标应用标识与所述指定配置信息的映射关系;
25.根据所述映射关系,获取所述目标应用标识对应的所述指定配置信息。
26.在一种可能的实现方式中,响应于所述目标属性信息包含所述目标应用优先等级;
27.所述获取所述目标属性信息对应的所述指定配置信息,包括:
28.获取所述目标应用优先等级对应的所述指定配置信息;所述目标应用优先等级与所述采集时间区间的时长、所述采集频率以及所述采集函数范围的函数种类数量成正相关。
29.在一种可能的实现方式中,响应于所述目标属性信息包含所述目标应用接口请求时延;
30.所述获取所述目标属性信息对应的所述指定配置信息,包括:
31.获取所述目标应用接口请求时延以及目标应用接口预计请求时延;
32.根据所述目标应用接口请求时延以及所述目标应用接口预计请求时延,确定时延差值;所述时延差值与所述采集时间区间的时长、所述采集频率以及所述采集函数范围的函数种类数量成正相关。
33.一方面,提供了一种函数执行性能监测装置,所述装置包括:
34.数据获取模块,用于获取目标线程栈在各个时间点上的堆栈信息数据;所述目标线程栈是目标应用程序运行过程中的线程栈;所述堆栈信息数据用于指示所述目标应用程序在对应的时间点上调用的函数;
35.时间确定模块,用于根据所述各个时间点上的堆栈信息数据,确定所述目标线程栈中的各个函数的执行时间;
36.性能获取模块,用于根据所述各个函数的执行时间,获取所述各个函数的执行性
能信息,所述执行性能信息用于指示对应的函数是否执行异常。
37.在一种可能的实现方式中,所述数据获取模块,包括:
38.信息获取子模块,用于获取指定配置信息,所述指定配置信息包含获取所述堆栈信息数据的采集时间区间、采集频率以及采集函数范围中的至少一个;
39.数据获取子模块,用于根据指定配置信息,获取所述目标线程栈在各个时间点上的所述堆栈信息数据。
40.在一种可能的实现方式中,所述数据获取模块,包括:
41.堆栈获取子模块,用于在所述采集时间区间内,按照所述采集频率获取所述目标线程栈中属于所述采集函数范围的堆栈信息数据;
42.所述时间确定模块,包括:
43.数量确定子模块,用于确定所述堆栈信息数据相同的连续的所述堆栈信息数据采集数量;所述堆栈信息数据相同是指位于所述目标线程栈顶部的栈帧相同以及所述目标线程栈中的各个栈帧内容相同;
44.时间获取子模块,用于将连续时间区间获取为所述目标函数的执行时间;所述连续时间区间是连续的所述堆栈信息数据采集数量减一后与所述采集频率的乘积。
45.在一种可能的实现方式中,所述数据获取子模块,包括:
46.属性获取单元,用于获取所述目标应用程序对应的目标属性信息;所述目标属性信息包含目标应用标识、目标应用优先等级以及目标应用接口请求时延中的至少一种;
47.配置信息获取单元,用于获取所述目标属性信息对应的所述指定配置信息;
48.数据获取单元,用于根据所述指定配置信息,获取所述目标线程栈在各个时间点上的所述堆栈信息数据。
49.在一种可能的实现方式中,响应于所述目标属性信息包含所述目标应用标识;
50.所述配置信息获取单元,用于,
51.获取所述目标应用标识与所述指定配置信息的映射关系;
52.根据所述映射关系,获取所述目标应用标识对应的所述指定配置信息。
53.在一种可能的实现方式中,响应于所述目标属性信息包含所述目标应用优先等级;
54.所述配置信息获取单元,用于,
55.获取所述目标应用优先等级对应的所述指定配置信息;所述目标应用优先等级与所述采集时间区间的时长、所述采集频率以及所述采集函数范围的函数种类数量成正相关。
56.在一种可能的实现方式中,响应于所述目标属性信息包含所述目标应用接口请求时延;
57.所述配置信息获取单元,用于,
58.获取所述目标应用接口请求时延以及目标应用接口预计请求时延;
59.根据所述目标应用接口请求时延以及所述目标应用接口预计请求时延,确定时延差值;所述时延差值与所述采集时间区间的时长、所述采集频率以及所述采集函数范围的函数种类数量成正相关。
60.另一方面,提供了一种计算机设备,所述计算机设备包含处理器和存储器,所述存
储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述函数执行性能监测方法。
61.又一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述函数执行性能监测方法。
62.根据本技术的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方面的各种可选实现方式中提供的函数执行性能监测方法。
63.本公开的实施例提供的技术方案可以包括以下有益效果:
64.在本公开实施例所示的方案中,计算机设备通过各个时间点的堆栈信息数据,确定各个函数的执行时间,从而达到判断各个函数是否执行异常的目的,通过上述方案,可以解决为了对各个函数进行全面监测而产生的“埋点”粒度过大的问题,提高了监测函数执行性能的通用性,从而减少了cpu、内存等系统资源的消耗。
65.应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
66.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并于说明书一起用于解释本公开的原理。
67.图1是根据一示例性实施例示出的一种函数执行性能监测系统的示意图;
68.图2是根据一示例性实施例示出的一种函数执行性能监测方法的流程图;
69.图3是根据一示例性实施例示出的一种函数执行性能监测方法的流程图;
70.图4是图3所示实施例涉及的一种函数执行时间预估示意图;
71.图5是图3所示实施例涉及的一种基于函数调用栈切片的耗时记录装置示意图;
72.图6是图3所示实施例涉及的一种按需采集的基于函数调用栈切片的耗时记录装置示意图;
73.图7是根据一示例性实施例示出的一种函数执行性能监测装置的框图;
74.图8是根据一示例性实施例示出的一种计算机设备的结构示意图。
具体实施方式
75.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
76.应当理解的是,在本文中提及的“若干个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象
是一种“或”的关系。
77.为了方便理解,下面对本公开实施例中涉及的名词进行说明。
78.1)java agent
79.java agent也称为java代理技术,在jdk(java development kit,java软件开发工具包)1.5版本以后,我们可以使用agent技术构建一个独立于应用程序的代理程序,java agent技术用来协助监测、运行甚至替换其他jvm(java virtual machine,java虚拟机)上的程序。使用它可以实现虚拟机级别的aop(aspect oriented programming,面向切面编程)功能。
80.2)线程栈
81.线程栈是指某时刻内存中线程调度的栈信息,当前调用的方法一般位于线程栈的栈顶。线程栈的内容是随着程序的运行动态变化的。
82.3)堆栈
83.堆栈是两种数据结构。其中,堆栈都是一种数据项按序排列的数据结构,只能在一端即栈顶对数据项进行插入和删除。
84.4)栈帧
85.栈帧也可以称为过程活动记录,栈帧是编译器用来实现函数调用过程的一种数据结构。c语言中,每个栈帧对应着一个未运行完的函数。从逻辑上讲,栈帧就是一个函数执行的环境:函数调用框架、函数参数、函数的局部变量、函数执行完后返回到哪里等等。栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低地址)。
86.图1是根据一示例性实施例示出的一种函数执行性能监测系统的示意图。该函数执行性能监测系统中包括第一服务器110、第二服务器120以及终端130。
87.被观测的目标应用程序是部署在第一服务器110上的java语言开发的应用程序。
88.其中,第一服务器110可以是虚拟机、物理服务器或者docker容器。
89.性能观测服务部署在第二服务器120上。
90.其中,第二服务器120可以是与被观测的目标应用程序处于相同集群下的虚拟机、物理服务器或者docker容器。
91.第一服务器110以及第二服务器120中可以包含有存储器,该存储器可以用来存储各个函数在各个时间点采集到的堆栈信息数据。
92.终端130可以通过有线或者无线网络与第一服务器110以及第二服务器120进行数据传输。
93.服务器120可以是一台服务器,或者可以是由若干台服务器构成的服务器集群,或者可以包含一个或多个虚拟化平台,或者也可以是一个云计算服务中心。
94.第一服务器110以及第二服务器120可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术在此不做限制。
95.可选地,上述的有线或者无线网络使用标准通信技术和/或协议。网络通常为因特
网、但也可以是任何网络,包括但不限于局域网(local area network,lan)、城域网(metropolitan area network,man)、广域网(wide area network,wan)、移动、无线网络、专用网络或者虚拟专用网络的任何组合。在一些实施例中,使用包括超文本标记语言(hyper text mark

up language,html)、可扩展标记语言(extensible markup language,xml)等的技术和/或格式来代表通过网络交换的数据。此外还可以使用诸如安全套接字层(secure socket layer,ssl)、传输层安全(transport layer security,tls)、虚拟专用网络(virtual private network,vpn)、网际协议安全(internet protocol security,ipsec)等常规加密技术来加密所有或者一些链路。在另一些实施例中,还可以使用定制和/或专用数据通信技术取代或者补充上述数据通信技术。
96.图2是根据一示例性实施例示出的一种函数执行性能监测方法的流程图。该函数执行性能监测方法可以应用于计算机设备中,通过对各个时间点的堆栈信息数据进行快照,确定各个函数的执行时间,从而达到判断各个函数是否执行异常的目的。该计算机设备可以是上述图1所示系统中的第一服务器110和第二服务器120中的至少一个。如图2所示,该函数执行性能监测方法可以包括以下步骤:
97.在步骤201中,获取目标线程栈在各个时间点上的堆栈信息数据;目标线程栈是目标应用程序运行过程中的线程栈;堆栈信息数据用于指示目标应用程序在对应的时间点上调用的函数。
98.在本公开实施例中,服务器在目标应用程序运行的过程中,获取目标线程栈在各个时间点上的堆栈信息数据,相同函数对应的堆栈信息数据是相同的。
99.其中,服务器同时对多个运行中的线程获取执行函数的堆栈信息数据,对于同步调用的目标函数,线程执行函数的顺序是串行的。也就是说,一个线程在一个连续的时间分片中执行一个同步函数。
100.在步骤202中,根据各个时间点上的堆栈信息数据,确定目标线程栈中的各个函数的执行时间。
101.在本公开实施例中,服务器根据各个时间点上的堆栈信息数据确定目标线程栈中各个函数的执行时间。
102.其中,在一个连续的时间区间内,若目标函数的栈帧在线程栈的顶部,并且线程整个栈帧的内容一致,则目标函数处于执行中。否则,目标函数执行完成。
103.在步骤203中,根据各个函数的执行时间,获取各个函数的执行性能信息,执行性能信息用于指示对应的函数是否执行异常。
104.在本公开实施例中,服务器根据获取到的目标应用程序中的各个函数的执行时间,确定各个函数的执行性能信息,当执行时间出现异常时,指示该函数出现执行异常。
105.其中,当目标应用程序中的至少一个调用函数出现执行异常时,该目标应用程序出现执行异常。
106.综上所述,本公开实施例中提供的函数执行性能监测方法。通过上述方案,计算机设备通过各个时间点的堆栈信息数据,确定各个函数的执行时间,从而达到判断各个函数是否执行异常的目的,通过上述方案,可以解决为了对各个函数进行全面监测而产生的“埋点”粒度过大的问题,提高了监测函数执行性能的通用性,从而减少了cpu、内存等系统资源的消耗。
107.图3是根据另一示例性实施例示出的一种函数执行性能监测方法的流程图。该函数执行性能监测方法可以应用于计算机设备中,通过对各个时间点的堆栈信息数据进行快照,确定各个函数的执行时间,从而达到判断各个函数是否执行异常的目的。该计算机设备可以是上述图1所示系统中的第一服务器110和第二服务器120中的至少一个。如图3所示,该函数执行性能监测方法可以包括如下步骤:
108.在步骤301中,获取指定配置信息。
109.在本公开实施例中,终端从服务器获取由开发人员设置输入的指定配置信息,或者从服务器获取到自动分配的指定配置信息。
110.其中,指定配置信息包含获取堆栈信息数据的采集时间区间、采集频率以及采集函数范围中的至少一个。堆栈信息数据用于指示目标应用程序在对应的时间点上调用的函数。采集时间区间用于指示服务器端采集堆栈信息数据的时间区间。采集频率用于指示服务器端采集堆栈信息数据的频率。采集函数范围用于指示服务器端采集指定代码包、指定类名或者指定函数名的堆栈信息数据。
111.在一种可能的实现方式中,开发人员通过性能观测界面输入指定配置信息中的至少一种,使服务器中存储指定配置信息,终端从服务器中获取指定配置信息。
112.在另一种可能的实现方式中,服务器端向终端发送目标应用程序对应的指定配置信息,使终端获取指定配置信息。
113.在步骤302中,根据指定配置信息,获取目标线程栈在各个时间点上的堆栈信息数据。
114.在本公开实施例中,终端根据执行配置信息,获取目标应用程序的目标线程栈上的各个时间点上的堆栈信息数据,将各个时间点上的堆栈信息数据发送给服务器端。
115.其中,目标线程栈是目标应用程序运行过程中的线程栈。
116.在一种可能的实现方式中,当指定配置信息中包含获取堆栈信息数据的采集时间区间、采集频率以及采集函数范围时,在采集时间区间内,终端按照采集频率获取目标线程栈中属于采集函数范围的堆栈信息数据。
117.在一种可能的实现方式中,通过java agent技术按照指定的采集时间区间、采集频率以及采集函数范围,周期性的执行jstack命令,获取目标应用程序中的目标线程栈的上下文信息,从而获取各个时间点上的堆栈信息数据。
118.其中,jstack命令用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合。
119.在一种可能的实现方式中,响应于指定配置信息是由服务器自动分配,服务器获取目标应用程序对应的目标属性信息,然后获取目标属性信息对应的指定配置信息,最后根据指定配置信息,获取目标线程栈在各个时间点上的堆栈信息数据。
120.在一种可能的实现方式中,目标属性信息包含目标应用标识、目标应用优先等级以及目标应用接口请求时延中的至少一种。基于目标应用标识、目标应用优先等级以及目标应用接口请求时延分别获取指定配置信息的方法如下:
121.1)响应于目标属性信息包含目标应用标识,获取目标应用标识与指定配置信息的映射关系,根据映射关系,获取目标应用标识对应的指定配置信息。
122.其中,各个应用程序对应指定的应用标识,并且目标应用程序对应目标应用标识,
各个应用标识与各个指定配置信息具有映射关系,一种应用标识对应一个指定配置信息,并且各个应用标识可以对应相同的指定配置信息。
123.比如,在服务器的数据库中可以预先存储有各个应用标识与各个指定配置信息的映射关系表,映射关系表中可以包含应用标识“1”对应的指定配置信息是第一种指定配置信息,应用标识“2”对应的指定配置信息是第二种指定配置信息,应用标识“3”对应的指定配置信息是第一种指定配置信息。当获取到目标应用标识是应用标识“3”时,可以获取到与应用标识“3”对应的第一种指定配置信息为目标应用标识对应的指定配置信息。
124.2)响应于目标属性信息包含目标应用优先等级,获取目标应用优先等级对应的指定配置信息。
125.其中,目标应用优先等级与采集时间区间的时长、采集频率以及采集函数范围的函数种类数量成正相关。即由于基于目标应用优先等级可以确定目标应用需要监测函数的细致程度,所以目标应用优先等级越高,指示需要监测函数的细致程度越高,目标应用对应指定配置信息中的采集时间区间越长,采集频率越高,采集函数范围越大;目标应用优先等级越低,指示需要监测函数的细致程度越低,对应指定配置信息中的采集时间区间越短,采集频率越低,采集函数范围越小。
126.比如,通过各个应用程序的身份标识,可以确定各个应用标识所属的应用优先等级。应用优先等级可以分为a、b、c、d四个优先等级,处于a等级的应用优先级最高,处于d等级的应用优先级最低。相对应于a、b、c、d四个优先等级,分别存储有第一指定配置信息、第二指定配置信息、第三指定配置信息以及第四指定配置信息。当获取到目标应用标识是应用标识“3”时,可以确定目标应用处于的应用优先等级为a等级,获取到与应用优先等级为a等级对应的第一指定配置信息为目标应用程序对应的指定配置信息。
127.3)响应于目标属性信息包含目标应用接口请求时延,服务器获取目标应用接口请求时延以及目标应用接口预计请求时延,根据目标应用接口请求时延以及目标应用接口预计请求时延,确定时延差值。
128.其中,时延差值与采集时间区间的时长、采集频率以及采集函数范围的函数种类数量成正相关。即由于基于时延差值可以确定该应用程序出现函数性能执行问题的函数数量,所以时延差值越大,指示需要监测的函数越多,对应指定配置信息中的采集时间区间越长,采集频率越高,采集函数范围越大;时延差值越小,指示需要监测的函数越少,对应指定配置信息中的采集时间区间越短,采集频率越低,采集函数范围越小。
129.比如,通过向应用程序接口发送外部请求,开始执行应用程序,当应用程序执行完成时,向应用程序接口返回请求,将统计得到的接收请求到返回请求的时间区间确定为目标应用接口请求时延,各个应用程序在正常运行时具有的接口请求时延为目标应用接口预计请求时延。当目标应用接口请求时延大于目标应用接口预计请求时延时,指示在目标应用程序执行的过程中调用的各个函数中至少存在一个函数具有执行性能问题,由于时延差值可以指示目标应用程序中存在的执行性能问题对应用程序的影响程度,所以时延差值越大,指示需要监测的函数越多,对应指定配置信息中的采集时间区间越长,采集频率越高,采集函数范围越大。可以设置一个指定阈值,当获取到的时延差值大于指定阈值时,确定指定配置信息为高效指定配置信息,当获取到的时延差值小于等于指定阈值时,确定指定配置信息为低效指定配置信息。当获取到时延差值大于指定阈值时,可以确定目标应用程序
对应的指定配置信息为高效指定配置信息。
130.在另一种可能的实现方式中,当目标属性信息包含目标应用标识、目标应用优先等级以及目标应用接口请求时延中的至少两种时,根据各个目标属性信息的优先级确定获取指定配置信息的方法。
131.比如,各个目标属性信息的优先级可以是目标应用标识的优先级大于目标应用接口请求时延大于目标应用优先等级。当目标属性信息同时包括目标应用标识以及目标应用接口请求时延是,服务器依据目标应用标识与指定配置信息的映射关系获取指定配置信息。
132.在步骤303中,根据各个时间点上的堆栈信息数据,确定目标线程栈中的各个函数的执行时间。
133.在本公开实施例中,服务器基于各个时间点上的堆栈信息数据,分别计算确定目标线程栈中的各个函数的开始执行时间以及结束执行时间,并且确定目标线程栈中各个函数的执行时间。
134.在一种可能的实现方式中,服务器确定堆栈信息数据相同的连续的堆栈信息数据的采集数量,然后,将连续时间区间获取为目标函数的执行时间。
135.其中,堆栈信息数据相同是指位于目标线程栈顶部的栈帧相同以及目标线程栈中的各个栈帧内容相同。连续时间区间是连续的堆栈信息数据采集数量减一后与采集频率的乘积。
136.示例性的,由于两个连续的快照含有相同的方法栈,可以指示该方法函数在连续两个快照的时间间隔内处于执行状态。通过连续快照的方式可以统计时间间隔累加计算函数的执行时间。
137.比如,图4是本公开实施例涉及的一种函数执行时间预估示意图。如图4所示,由d0到d9代表进行连续进行线程栈快照的采集时间点,通过比较d0到d9采集到的堆栈信息数据,可以确定在d4获得的堆栈信息数据和在d8获得的堆栈信息数据之间的各个采集时间点获得的堆栈信息数据相同,即目标线程栈顶部的栈帧相同以及目标线程栈中的各个栈帧内容相同,该顶部栈帧指示的函数执行开始时间在d3与d4之间,函数执行结束时间在d8与d9之间,从而可以计算得出该函数执行的预估执行时间41为d4到d8的区间时长。
138.在步骤304中,根据各个函数的执行时间,获取各个函数的执行性能信息。
139.在本公开实施例中,服务器获取目标应用程序中的各个函数的执行时间,根据各个函数的执行时间获取各个函数的执行性能信息。
140.其中,执行性能信息用于指示对应的函数是否执行异常。
141.在一种可能的实现方式中,响应于函数的执行时间大于指定阈值,确定函数存在执行异常。
142.其中,当服务器获取到各个函数的执行性能信息时,可以同时获取到执行性能信息指示存在执行异常的函数名称或者地址信息。
143.在步骤305中,根据各个函数的执行性能信息,获取目标应用程序的性能信息。
144.在
本公

实施例中,服务器根据获

到的各个函数的执行性能信息,可

确定目标应用程序中出现执行异常的函数,当各个函数的执行性能信息指示目标应用程序中未出现执行异常的函数,则获取目标应用程序的性能信息是正常执行,若各个函数的执行性能信息
指示目标应用程序中出现执行异常的函数,则获取目标应用程序的性能信息是执行异常。
145.在一种可能的实现方式中,响应于目标应用程序存在执行异常,在终端上展示出现执行异常的函数名称以及对应的警报信息。
146.比如,图5是本公开实施例涉及的一种基于函数调用栈切片的耗时记录装置示意图。如图5所示,被观测的应用程序,也就是目标应用程序中,运用java agent技术(s51),周期性的执行jstack命令从java应用中获取目标线程栈的上下文信息(s52)。若在d0到d9连续的时间区间内,java agent程序以每5ms的采集频率,执行jstack命令获取堆栈信息数据。然后通过java agent程序将获取的堆栈信息数据批量发送给性能观测服务端,上报给性能观测服务端的数据采集器,数据采集器存储获取到的数据(s53),通过分析计算器查询数据采集器存储的数据,按照函数执行时间的算法计算该java应用中各个函数的执行耗时,即在d0到d9时间区间内,比较存储的10个采样点的堆栈信息数据,得到堆栈相同的连续的时间区间,例如,如图4所示连续的时间区间为d4到d8。可以计算得到该函数的执行耗时是d4到d8的时长,(8

4 1)*5ms=25ms(s54)。当设置的耗时较长的报警阈值为500ms时,若分析计算器计算出的某次函数调用耗时超过500ms,则通过邮件或者短信等方式进行告警(s55)。
147.在一种可能的实现方式中,响应于接收到采集堆栈信息数据的指令,通过java agent程序开始采集各个函数的堆栈信息数据,否则java agent程序处于待机状态。
148.比如,图6是本公开实施例涉及的一种按需采集的基于函数调用栈切片的耗时记录装置示意图。如图6所示,当性能观测服务端发送采集堆栈信息数据的指令后(s61),根据负责性能观测的工程师在性能观测服务端设置的指定配置信息使用java agent程序,其中,指定配置信息具体包含采集频率、采集时间区间以及采集的代码,其中采集的代码可以是java中的包名、类名以及方法(s62)。若采集频率设置为20ms,采集时间区间为2020年8月10日12点00分00秒到2020年8月10日12点10分00秒,采集的代码是com.test.log.*.*,其中,第一个*代表所有com.test.log下的所有类,第二个*代表所有方法,性能观测服务端把指定配置信息发送给被观测应用,被观测应用的java agent程序按照指定配置信息,执行jstack命令的方式获取堆栈信息数据(s63)。通过指定配置信息进行采集会产生10*60*1000(ms)/20ms=30000条采集的堆栈信息数据(s64)。通过java agent程序将获取的堆栈信息数据批量发送给性能观测服务端,上报给性能观测服务端的数据采集器,数据采集器存储获取到的数据(s65)。
149.分析计算器查询数据采集器采集的堆栈信息数据,按照函数执行时间的算法分段(每段100个数据)计算函数执行耗时,以第一段从d0到d99举例,在d0到d99时间区间内,比较这100个采样点的堆栈信息数据,得到堆栈信息数据相同的连续的时间区间,假设为d20到d49,该函数的执行时间为d20到d49的时长,执行时间=(49

20 1)*20ms=600ms(s66)。当设置的耗时较长的报警阈值为500ms时,若分析计算器计算出的某次函数调用耗时超过500ms,则通过邮件或者短信等方式进行告警(s67)。
150.在另一种可能的实现方式中,服务器对目标应用程序的接口响应速度进行监控,响应于服务器接收到的目标应用接口请求时延与目标应用接口预计请求时延的差值大于指定阈值,此时,目标应用程序接口响应速度较慢,触发执行步骤301至步骤304,然后,输出异常的函数信息。通过服务器只优先监测目标应用程序接口响应速度初步监测目标应用程
序是否出现运行异常,避免了目标应用程序正常运行时服务器的无用监测,从而减少了服务器系统资源的消耗。
151.综上所述,本公开实施例中提供的函数执行性能监测方法。通过上述方案,计算机设备通过各个时间点的堆栈信息数据,确定各个函数的执行时间,从而达到判断各个函数是否执行异常的目的,通过上述方案,可以解决为了对各个函数进行全面监测而产生的“埋点”粒度过大的问题,提高了监测函数执行性能的通用性,从而减少了cpu、内存等系统资源的消耗。
152.图7是根据一示例性实施例示出的一种函数执行性能监测装置的框图,如图7所示,该函数执行性能监测装置可以通过硬件或者软硬结合的方式实现为计算机设备中的全部或者部分,以执行图2或图3对应实施例所示的方法的全部或部分步骤。该函数执行性能监测装置可以包括:
153.数据获取模块710,用于获取目标线程栈在各个时间点上的堆栈信息数据;所述目标线程栈是目标应用程序运行过程中的线程栈;所述堆栈信息数据用于指示所述目标应用程序在对应的时间点上调用的函数;
154.时间确定模块720,用于根据所述各个时间点上的堆栈信息数据,确定所述目标线程栈中的各个函数的执行时间;
155.性能获取模块730,用于根据所述各个函数的执行时间,获取所述各个函数的执行性能信息,所述执行性能信息用于指示对应的函数是否执行异常。
156.在一种可能的实现方式中,所述数据获取模块710,包括:
157.信息获取子模块,用于获取指定配置信息,所述指定配置信息包含获取所述堆栈信息数据的采集时间区间、采集频率以及采集函数范围中的至少一个;
158.数据获取子模块,用于根据指定配置信息,获取所述目标线程栈在各个时间点上的所述堆栈信息数据。
159.在一种可能的实现方式中,所述数据获取模块710,包括:
160.堆栈获取子模块,用于在所述采集时间区间内,按照所述采集频率获取所述目标线程栈中属于所述采集函数范围的堆栈信息数据;
161.所述时间确定模块720,包括:
162.数量确定子模块,用于确定所述堆栈信息数据相同的连续的所述堆栈信息数据采集数量;所述堆栈信息数据相同是指位于所述目标线程栈顶部的栈帧相同以及所述目标线程栈中的各个栈帧内容相同;
163.时间获取子模块,用于将连续时间区间获取为所述目标函数的执行时间;所述连续时间区间是连续的所述堆栈信息数据采集数量减一后与所述采集频率的乘积。
164.在一种可能的实现方式中,所述数据获取子模块,包括:
165.属性获取单元,用于获取所述目标应用程序对应的目标属性信息;所述目标属性信息包含目标应用标识、目标应用优先等级以及目标应用接口请求时延中的至少一种;
166.配置信息获取单元,用于获取所述目标属性信息对应的所述指定配置信息;
167.数据获取单元,用于根据所述指定配置信息,获取所述目标线程栈在各个时间点上的所述堆栈信息数据。
168.在一种可能的实现方式中,响应于所述目标属性信息包含所述目标应用标识;
169.所述配置信息获取单元,用于,
170.获取所述目标应用标识与所述指定配置信息的映射关系;
171.根据所述映射关系,获取所述目标应用标识对应的所述指定配置信息。
172.在一种可能的实现方式中,响应于所述目标属性信息包含所述目标应用优先等级;
173.所述配置信息获取单元,用于,
174.获取所述目标应用优先等级对应的所述指定配置信息;所述目标应用优先等级与所述采集时间区间的时长、所述采集频率以及所述采集函数范围的函数种类数量成正相关。
175.在一种可能的实现方式中,响应于所述目标属性信息包含所述目标应用接口请求时延;
176.所述配置信息获取单元,用于,
177.获取所述目标应用接口请求时延以及目标应用接口预计请求时延;
178.根据所述目标应用接口请求时延以及所述目标应用接口预计请求时延,确定时延差值;所述时延差值与所述采集时间区间的时长、所述采集频率以及所述采集函数范围的函数种类数量成正相关。
179.综上所述,本公开实施例中提供的函数执行性能监测方法。通过上述方案,计算机设备通过各个时间点的堆栈信息数据,确定各个函数的执行时间,从而达到判断各个函数是否执行异常的目的,通过上述方案,可以解决为了对各个函数进行全面监测而产生的“埋点”粒度过大的问题,提高了监测函数执行性能的通用性,从而减少了cpu、内存等系统资源的消耗。
180.需要说明的一点是,上述实施例提供的装置在实现其功能时,仅以上述各个功能模块的划分进行举例说明,实际应用中,可以根据实际需要而将上述功能分配由不同的功能模块完成,即将设备的内容结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
181.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
182.图8是根据一示例性实施例示出的一种计算机设备的结构示意图。所述计算机设备800包括中央处理单元(central processing unit,cpu)801、包括随机存取存储器(random access memory,ram)802和只读存储器(read

only memory,rom)803的系统存储器804,以及连接系统存储器804和中央处理单元801的系统总线805。所述计算机设备800还包括帮助计算机设备内的各个器件之间传输信息的基本输入/输出系统(input/output,i/o系统)806,和用于存储操作系统813、应用程序814和其他程序模块815的大容量存储设备807。
183.所述基本输入/输出系统806包括有用于显示信息的显示器808和用于用户输入信息的诸如鼠标、键盘之类的输入设备809。其中所述显示器808和输入设备809都通过连接到系统总线805的输入输出控制器810连接到中央处理单元801。所述基本输入/输出系统806还可以包括输入输出控制器810以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器810还提供输出到显示屏、打印机或其他类型的输
出设备。
184.所述大容量存储设备807通过连接到系统总线805的大容量存储控制器(未示出)连接到中央处理单元801。所述大容量存储设备807及其相关联的计算机设备可读介质为计算机设备800提供非易失性存储。也就是说,所述大容量存储设备807可以包括诸如硬盘或者只读光盘(compact disc read

only memory,cd

rom)驱动器之类的计算机设备可读介质(未示出)。
185.不失一般性,所述计算机设备可读介质可以包括计算机设备存储介质和通信介质。计算机设备存储介质包括以用于存储诸如计算机设备可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机设备存储介质包括ram、rom、可擦除可编程只读存储器(erasable programmable read only memory,eprom)、带电可擦可编程只读存储器(electrically erasable programmable read

only memory,eeprom),cd

rom、数字视频光盘(digital video disc,dvd)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机设备存储介质不局限于上述几种。上述的系统存储器804和大容量存储设备807可以统称为存储器。
186.根据本公开的各种实施例,所述计算机设备800还可以通过诸如因特网等网络连接到网络上的远程计算机设备运行。也即计算机设备800可以通过连接在所述系统总线805上的网络接口单元811连接到网络812,或者说,也可以使用网络接口单元811来连接到其他类型的网络或远程计算机设备系统(未示出)。
187.所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,中央处理器801通过执行该一个或一个以上程序来实现图2或图3所示的方法的全部或者部分步骤。
188.本领域技术人员应该可以意识到,在上述一个或多个示例中,本公开实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机设备可读介质中或者作为计算机设备可读介质上的一个或多个指令或代码进行传输。计算机设备可读介质包括计算机设备存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机设备程序的任何介质。存储介质可以是通用或专用计算机设备能够存取的任何可用介质。
189.本公开实施例还提供了一种计算机设备存储介质,用于储存为上述测试装置所用的计算机设备软件指令,其包含用于执行上述函数执行性能监测方法所设计的程序。
190.根据本公开的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方面的各种可选实现方式中提供的函数执行性能监测方法。
191.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
192.应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献