CN116932342A - 一种耗时统计方法、系统及存储介质和终端设备 - Google Patents
一种耗时统计方法、系统及存储介质和终端设备 Download PDFInfo
- Publication number
- CN116932342A CN116932342A CN202210349318.5A CN202210349318A CN116932342A CN 116932342 A CN116932342 A CN 116932342A CN 202210349318 A CN202210349318 A CN 202210349318A CN 116932342 A CN116932342 A CN 116932342A
- Authority
- CN
- China
- Prior art keywords
- sub
- time
- function
- functions
- consuming
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000007619 statistical method Methods 0.000 title claims abstract description 23
- 238000000034 method Methods 0.000 claims abstract description 118
- 230000000875 corresponding effect Effects 0.000 claims description 114
- 230000006870 function Effects 0.000 claims description 111
- 230000002159 abnormal effect Effects 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 13
- 230000002596 correlated effect Effects 0.000 claims description 3
- 238000004458 analytical method Methods 0.000 abstract description 6
- 230000010365 information processing Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 13
- 230000001960 triggered effect Effects 0.000 description 4
- MYWUZJCMWCOHBA-VIFPVBQESA-N methamphetamine Chemical compound CN[C@@H](C)CC1=CC=CC=C1 MYWUZJCMWCOHBA-VIFPVBQESA-N 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000004879 molecular function Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3419—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3452—Performance evaluation by statistical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3495—Performance evaluation by tracing or monitoring for systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Life Sciences & Earth Sciences (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Probability & Statistics with Applications (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种耗时统计方法、系统及存储介质和终端设备,应用于信息处理技术领域。本实施例中,耗时统计系统会在应用进程根据目标操作请求调用对应的多个子函数时,分别对调用多个子函数的耗时进行统计,且分别获取多个子函数的调用路径,然后根据各个子函数的耗时和调用路径,即可确定合并耗时信息,包括各个子函数在相应的调用层级中的耗时,最后输出合并耗时信息。在得到合并耗时信息的过程中只涉及到各个子函数的耗时和调用路径,而每一个子函数的耗时和调用路径都比较容易获取到,使得耗时统计的过程比较简单,且在合并耗时信息中可以详细地体现目标操作请求所涉及到的所有子函数的耗时,便于对应用程序的性能进行分析。
Description
技术领域
本发明涉及信息处理技术领域,特别涉及一种耗时统计方法、系统及存储介质和终端设备。
背景技术
现在的应用程序可以应用于各项业务场景中,实现了多种多样的功能,为用户提供方便,比如,实现线上会议的应用程序,或实现语言学习的应用程序等,这些应用程序的运行本质都是通过对多个函数的调用实现各项功能。因此,为了对应用程序的性能进行评估,其中一个方面可以对应用程序所涉及的函数耗时进行统计。
现有的耗时统计方法中一般只能对应用程序涉及的单个函数的耗时进行监测,但是由于对单个函数的耗时的影响因素较多,不容易基于单个函数的耗时进行分析。
发明内容
本发明实施例提供一种耗时统计方法、系统及存储介质和终端设备,方便对应用程序的性能进行分析。
本发明实施例一方面提供一种耗时统计方法,包括:
当应用程序对应的应用进程根据目标操作请求调用对应的多个子函数时,分别对调用所述多个子函数的耗时进行统计;
分别获取所述多个子函数的调用路径;
根据所述多个子函数中各个子函数的耗时和调用路径,确定所述目标操作请求对应的合并耗时信息,所述合并耗时信息中包括所述各个子函数在相应的调用层级中的耗时;
输出所述目标操作请求对应的合并耗时信息。
本发明实施例另一方面提供一种耗时统计系统,包括:
统计单元,用于当应用程序对应的应用进程根据目标操作请求调用对应的多个子函数时,分别对调用所述多个子函数的耗时进行统计;
路径获取单元,用于分别获取所述多个子函数的调用路径;
整体耗时单元,用于根据所述多个子函数中各个子函数的耗时和调用路径,确定所述目标操作请求对应的合并耗时信息,所述合并耗时信息中包括所述各个子函数在相应的调用层级中的耗时;
输出单元,用于输出所述目标操作请求对应的合并耗时信息。
本发明实施例另一方面还提供一种计算机可读存储介质,所述计算机可读存储介质储存多个计算机程序,所述计算机程序适于由处理器加载并执行如本发明实施例一方面所述的耗时统计方法。
本发明实施例另一方面还提供一种终端设备,包括处理器和存储器;
所述存储器用于储存多个计算机程序,所述计算机程序用于由处理器加载并执行如本发明实施例一方面所述的耗时统计方法;所述处理器,用于实现所述多个计算机程序中的各个计算机程序。
可见,在本实施例的方法中,耗时统计系统会在应用进程根据目标操作请求调用对应的多个子函数时,分别对调用多个子函数的耗时进行统计,且分别获取多个子函数的调用路径,然后根据各个子函数的耗时和调用路径,即可确定合并耗时信息,包括各个子函数在相应的调用层级中的耗时,最后输出合并耗时信息。在得到合并耗时信息的过程中只涉及到各个子函数的耗时和调用路径,而每一个子函数的耗时和调用路径都比较容易获取到,使得耗时统计的过程比较简单,且在合并耗时信息中可以详细地体现目标操作请求所涉及到的所有子函数的耗时,便于对应用程序的性能进行分析。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种耗时统计方法的示意图;
图2是本发明一个实施例提供的一种耗时统计方法的流程图;
图3a是本发明一个实施例中目标操作请求对应的多个子函数的示意图;
图3b是本发明一个实施例中各个子函数关联耗时统计主函数的示意图;
图3c是本发明一个实施例中部分子函数关联耗时统计主函数的示意图;
图4是本发明一个应用实施例提供的一种耗时统计方法的流程图;
图5是本发明一个应用实施例中统计一个子函数的耗时的示意图;
图6是本发明一个实施例中确定合并耗时信息的方法流程图;
图7是本发明一个实施例中根据目标操作请求调用各子函数的示意图;
图8是本发明另一应用实施例中耗时统计方法所应用于的分布式系统的示意图;
图9是本发明另一应用实施例中区块结构的示意图;
图10是本发明实施例提供的一种耗时统计系统的逻辑结构示意图;
图11是本发明实施例提供的一种终端设备的逻辑结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排它的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供一种耗时统计方法,主要可以对任一应用程序在实现过程中各个函数调用的耗时进行统计,具体图1所示,耗时统计系统可以按照如下的方法实现对函数调用的耗时进行统计:
当应用程序对应的应用进程根据目标操作请求调用对应的多个子函数时,分别对调用所述多个子函数的耗时进行统计;分别获取所述多个子函数的调用路径;根据所述多个子函数中各个子函数的耗时和调用路径,确定所述目标操作请求对应的合并耗时信息,所述合并耗时信息中包括所述各个子函数在相应的调用层级中的耗时;输出所述目标操作请求对应的合并耗时信息。
在实际应用中,上述耗时统计系统主要可以应用于如下的应用终端中:手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器等。在应用终端中可以装载至少一个应用程序,这样应用于应用终端中的耗时统计系统可以针对任一应用程序执行上述的耗时统计方法。
这样,在得到合并耗时信息的过程中只涉及到各个子函数的耗时和调用路径,而每一个子函数的耗时和调用路径都比较容易获取到,使得耗时统计的过程比较简单,且在合并耗时信息中可以详细地体现目标操作请求所涉及到的所有子函数的耗时,便于对应用程序的性能进行分析。
本发明实施例提供一种耗时统计方法,主要是耗时统计系统所执行的方法,流程图如图2所示,包括:
步骤101,当应用程序对应的应用进程根据目标操作请求调用对应的多个子函数时,分别对调用多个子函数的耗时进行统计。
可以理解,耗时统计系统可以针对任一应用程序进行耗时统计,具体地,在运行任一应用程序时,可以启动一个应用进程,使得应用进程为用户提供相应的应用界面,在应用界面上包括用户操作控件,这样当用户操作任一用户操作控件时,应用进程会从应用界面接收到一操作请求(比如目标操作请求),并根据目标操作请求触发相应的目标操作。
而应用进程具体在根据目标操作请求执行相应操作时,实际上是按照一定的顺序调用多个子函数,应用进程对这些子函数之间的调用关系可以包括嵌套关系、并列关系等。例如图3a所示,当用户在某一应用界面上输入关键字并点击“查询”按钮时,应用进程对各个子函数的调用顺序为:先调用一个入口函数main,再调用子函数A;然后调用子函数B,对子函数B进行调用时,需要调用两个支路的子函数X和函数Y;然后调用子函数C,对子函数C进行调用时,需要调用两个支路(正常返回支路和异常返回支路)的子函数X和子函数Z;最后从出口函数退出主函数的调用。可知,应用进程在根据目标操作请求调用子函数的过程中,会在不同的时间重复多次调用相同的子函数,比如对函数X的调用。
在本实施例中,当应用进程在调用目标操作请求对应的多个子函数的过程中,需要对调用各个子函数的耗时进行统计。具体地,当应用进程在根据目标操作请求调用任一子函数前,触发耗时统主函数,通过调用耗时统计主函数记录任一子函数的起始时间,当应用进程成功调用任一子函数结束时,触发耗时统计主函数,通过耗时统计主函数记录任一子函数的成功结束时间,根据起始时间和成功结束时间确定任一子函数对应的耗时,具体地,任一子函数对应的耗时为成功结束时间与起始时间的差值。
需要说明的是,上述的任一子函数的成功结束时间是指应用进程调用任一子函数,成功完成一定的计算并得到相应结果的结束时间,但是在实际的应用中,对某一子函数的调用可能会发生异常,不能得到相应结果,在这种情况下,也可以确定该子函数的耗时,具体地,若应用进程调用任一子函数异常,通过耗时统计主函数记录任一子函数的异常结束时间,然后根据异常结束时间和起始时间确定任一子函数对应的耗时,具体地,任一子函数对应的耗时为异常结束时间与起始时间的差值。其中,异常结束时间是指当应用进程调用该子函数发生异常时,退出调用该子函数的时间。
进一步地,还可以通过耗时统计主函数分别设置各个子函数的调用状态,该调用状态包括:用于指示调用相应子函数成功的信息,或用于指示调用相应子函数失败的信息。
在具体实现的过程中,可以将任一目标操作请求对应的各个子函数与一个耗时统计主函数进行关联,例如图3b所示,一个目标操作请求对应的子函数为入口函数、子函数A和子函数B,在每个子函数之前通过关联代码1以关联耗时统计主函数,通过耗时统计主函数记录起始时间,在每个子函数之后通过关联代码2以关联耗时统计主函数,通过耗时统计主函数记录成功结束时间(或异常结束时间)且计算耗时。
这样,当应用进程接收到一目标操作请求后,通过设置在各个子函数前后的关联代码,实现与该子函数相关时间的记录,比如上述的起始时间、结束时间和异常结束时间等,且确定子函数对应的耗时。这些关联代码并没有侵入到子函数的计算过程中,从而不会影响应用进程调用子函数的进程。
另外需要说明的是,当应用进程调用各个子函数的过程中,可以不需要对目标操作请求对应的所有子函数进行耗时统计,而只针对需要关注的子函数进行耗时统计,例如图3c所示,一个目标操作请求对应的子函数为入口函数、子函数A、子函数B和子函数Y,若只需关注子函数A和子函数B,只需在子函数A和子函数B的前后通过关联代码1以关联耗时统计主函数,用于记录起始时间,在每个子函数之后通过关联代码2以关联耗时统计主函数,用于记录成功结束时间(或异常结束时间)且计算耗时。
步骤102,分别获取多个子函数的调用路径。
这里,任一子函数的调用路径是指应用进程在调用任一子函数时所经历过的路径,可以包括从调用入口函数到该子函数所经历过的其它子函数,例如上述图3a所示,对于子函数Y的调用时,调用的顺序为:入口函数—子函数A—子函数B—子函数Y,但是应用进程调用子函数Y时的调用路径为入口函数.子函数B.子函数Y。
在获取各个子函数的调用路径时,可以通过调用特定的获取函数即可获取到调用路径,且针对不同语言的应用程序,在获取调用路径时所使用的获取函数不同。例如,对于python语言的应用程序,可以使用inspect库,来获取调用路径。
需要说明的是,当通过上述步骤101中对某一个子函数的耗时进行统计的同时,或者在统计得到一个子函数的耗时之后,可以针对该子函数执行本步骤102中调用路径的获取,然后可以将一个子函数的耗时与调用路径进行关联。
其中,由于应用进程在根据目标操作请求调用子函数的过程中,可能会在不同的时间重复多次调用相同的子函数,但是每次调用同一个子函数的函数路径都不相同。
步骤103,根据多个子函数中各个子函数的耗时和调用路径,确定目标操作请求对应的合并耗时信息,合并耗时信息中包括各个子函数在相应的调用层级中的耗时。
其中,合并耗时信息具体可以展示各个子函数的调用层级及某些子函数之间的调用关系,比如嵌套关系等。
具体地,上述多个子函数中第一子函数为入口函数,多个子函数中的第二子函数为除了入口函数之外的其它子函数,第二子函数的调用路径包括:从入口函数到第二子函数所经历的所有子函数及所有子函数之间的调用顺序,这样,耗时统计系统在执行步骤时,可以根据第二子函数的调用路径中包括的所有子函数之间的调用顺序,确定所有子函数的调用层级,及确定所有子函数中某些子函数之间的调用关系;最后在合并耗时信息中储存各个子函数的调用层级、耗时及与其它子函数之间的调用关系。
其中,所有子函数中的第一子函数对应的调用层级为第一调用层级,而所有子函数中某些子函数之间的调用关系可以包括:嵌套关系,即一个子函数嵌套在另一子函数之下,且这里的嵌套关系主要是一个调用层级的子函数与另一个调用层级的子函数之间的调用关系。
例如上述图3a所示,对于子函数Y的调用路径为:入口函数.子函数B.子函数Y,则确定入口函数的调用层级为第一调用层级,子函数B的调用层级为第二调用层级,子函数Y的调用层级为第三调用层级。其中,子函数B嵌套在入口函数之下,子函数Y嵌套在子函数B之下。
进一步地,若上述步骤中通过耗时统计主函数设置了各个子函数的调用状态,即用于指示调用相应子函数成功的信息,或用于指示调用相应子函数失败的信息,则在合并耗时信息中包括各个子函数的调用状态。
需要说明的是,一个目标操作请求对应的任一子函数的调用路径中,排在第一位调用的子函数都相同,为入口函数,若某一子函数的调用路径中:排在第一位调用的子函数不是入口函数,则设置某一子函数的异常标记。
步骤104,输出目标操作请求对应的合并耗时信息。
需要说明的是,当一应用进程启动后,每次触发同一个目标操作请求,根据目标操作请求调用各个子函数的过程中,会由于各种因素,使得在不同流程中获取的合并耗时信息也会不同,其中在不同流程中调用同一子函数的耗时也可能会不同。因此,耗时统计系统进一步地还可以将合并耗时信息与目标操作请求的触发次序进行关联,得到关联后的合并耗时信息,这样在输出目标操作请求对应的合并耗时信息时,主要是输出关联后的合并耗时信息。
其中,目标操作请求的触发次序用于指示应用进程启动后触发目标操作请求的次数。例如,当应用进程第一次触发目标操作请求q,对应的触发次序为t1,可以将得到的合并耗时信息与该目标操作请求的触发次序t1进行关联;在之后的流程中,应用进程第二次触发目标操作请求q,对应的触发次序为t2,可以将得到的合并耗时信息与该目标操作请求的触发次序t2进行关联。
可见,在本实施例的方法中,耗时统计系统会在应用进程根据目标操作请求调用对应的多个子函数时,分别对调用多个子函数的耗时进行统计,且分别获取多个子函数的调用路径,然后根据各个子函数的耗时和调用路径,即可确定合并耗时信息,包括各个子函数在相应的调用层级中的耗时,最后输出合并耗时信息。在得到合并耗时信息的过程中只涉及到各个子函数的耗时和调用路径,而每一个子函数的耗时和调用路径都比较容易获取到,使得耗时统计的过程比较简单,且在合并耗时信息中可以详细地体现目标操作请求所涉及到的所有子函数的耗时,便于对应用程序的性能进行分析。
以下以一个具体的应用实例来说明本发明实施例的耗时统计方法,如图4所示,耗时统计系统可以通过如下的步骤对任一应用程序在运行的耗时进行统计:
步骤201,当应用进程根据目标操作请求调用对应的各个子函数前,会触发一个耗时统计主函数,通过耗时统计主函数记录子函数的起始时间。
步骤202,当应用进程调用各个子函数结束时,触发耗时统计主函数,通过耗时统计主函数分别统计应用进程调用各个子函数的成功结束时间或异常结束时间,并通过成功结束时间和起始时间计算子函数的耗时,或通过异常结束时间和起始时间计算子函数的耗时。
具体地,用户可以操作一应用终端,使得应用终端启动一应用程序对应的应用进程,该应用进程会向用户显示应用界面,在应用界面上包括用户操作控件,当用户操作该用户操作控件时,应用进程会接收到相应的目标操作请求,这样应用进程会根据目标操作请求调用对应的多个子函数。
具体地,如图5所示,可以按照如下步骤统计一个子函数的耗时:
A1、当应用进程需要调用一个子函数前,触发耗时统计主函数,通过耗时统计主函数记录一个子函数的起始时间(start_time)。然后应用进程会调用一个子函数进行相应操作,当应用进程调用子函数成功,并正常退出该子函数的调用时,可以执行如下步骤B1,当应用进程调用子函数未成功,并未正常退出该子函数的调用,而是异常退出该子函数的调用时,可以执行如下步骤C1。
B1、当应用进程成功调用一个子函数,并得到相应的结果且退出该子函数的调用时,通过触发耗时统计主函数记录一个子函数的成功结束时间(end_time1),然后继续执行步骤D1。
C1、当应用进程调用一个子函数异常且退出该子函数的调用时,通过触发耗时统计主函数记录一个子函数的异常结束时间(end_time2),然后继续执行步骤D1。
D1、通过耗时统计主函数设置该子函数的调用状态(state),对于步骤B1的情况,设置的调用状态为用于指示调用相应子函数成功的信息,比如0;对于步骤C1的情况,设置的调用状态为用于指示调用相应子函数失败的信息,比如-1。
E1、通过耗时统计主函数确定一个子函数对应的耗时为成功结束时间end_time1与起始时间start_time的差值,或者为异常结束时间end_time2与起始时间start_time的差值。且通过耗时统计主函数可以将子函数的调用路径与该子函数的耗时进行绑定,且储存绑定的对应关系。
进一步地,在耗时统计主函数统计各个子函数的耗时的过程中,若耗时统计主函数正常退出,耗时统计主函数可以将子函数的耗时与调用路径的绑定关系正常返回给应用进程,且还可以将调用状态等信息返回给应用进程;若耗时统计主函数异常退出,耗时统计主函数可以向应用进程抛出异常的信息。
在应用进程调用各个子函数的过程中,通过耗时统计主函数可以重复执行上述步骤A1到E1,从而完成了目标操作请求对应的所有子函数的耗时统计。在另一个具体的实施例中,应用进程可以只针对需要关注的子函数,通过关联相应的耗时主函数,并通过耗时主函数统计关注的子函数的耗时,而不需要统计所有子函数的耗时。
步骤203,分别获取目标操作请求对应的多有子函数的调用路径。
具体地,当上述步骤202中统计一个子函数的耗时的同时,耗时统计系统可以获取该子函数的调用路径(method)。
步骤204,将各个子函数的耗时、调用路径、调用路径及详细信息进行关联。
例如:将一个子函数的相关信息都进行关联可以得到如下数据:
耗时(cost_time)为5秒;函数路径method为“Main.B.X”;调用状态state为为0;详细信息detail为[…]。
步骤205,将上述得到的各个子函数的所有信息进行合并操作,确定出目标操作请求对应的合并耗时信息。
具体地,如图6所示,耗时统计系统可以通过如下的步骤确定出合并耗时信息:
A2、遍历上述步骤中获取的各个子函数的相关信息,选取其中一个子函数的调用路径,包括从入口函数到当前的子函数所经历的所有子函数的调用顺序。
在具体实施例中,调用路径可以包括一个或多个子函数的标识,在相邻的两个子函数的标识之间为分隔符(比如点),其中的一个子函数的标识可以表示一个节点。
B2、遍历调用路径对应的所有节点,确定一个节点对应的调用层级。
具体地,在确定一个节点对应的调用层级时,在第一个分隔符之前的一个子函数的调用层级为第一调用层级,在第一个分隔符与第二个分隔符之间的一个子函数的调用层级为第二调用层级,依次类推。
例如,一个子函数的调用路径为Main.B.X,则子函数Main的调用层级为第一调用层级,子函数B为调用层级为第二调用层级,子函数X的调用层级为第三调用层级。
C2、判断该节点对应的调用层级是否储存在已储存的合并耗时信息中,若已储存,则返回执行步骤B2;若未储存,则执行如下步骤D2。
D2、在合并耗时信息中创建一个节点,将该节点的相关信息,比如调用层级、耗时及与其它节点之间的调用关系储存到合并耗时信息中。
E2、判断一个子函数的调用路径所表示的所有节点是否都处理完,若是,执行如下步骤F2;若不是,返回执行步骤B2。
F2、判断针对所有子函数的相关信息都进行了处理,若是,完成合并耗时信息的确定;若不是,返回执行步骤A2。
需要说明的是,针对同一个目标操作请求,所有子函数的调用路径中排在第一位调用的子函数都是相同的,即都为入口函数,若某一子函数是调用路径中排在第一位调用的并不是入口函数,则可以设置该子函数的异常标记。
另外需要说明的是,耗时统计系统可以将确定出的合并耗时信息储存为多种格式的数据,比如json或excel等格式。具体地,可以将各个子函数的调用层级的信息与各个子函数的其它信息进行关联起来。
例如:一个目标操作请求对应的三个子函数的信息如下所示:
子函数Methd1的信息包括:耗时(cost_time)为1秒,函数路径method为“Main.B.Methd1”,调用状态state为为0,详细信息detail为[…]。
子函数Methd2的信息包括:耗时(cost_time)为2秒,函数路径method为“Main.C.Methd2”,调用状态state为为-1,详细信息detail为[…]。
子函数Methd3的信息包括:耗时(cost_time)为3秒,函数路径method为“Main.C.Methd3”,调用状态state为为-1,详细信息detail为[…]。
根据这些子函数的信息可以确定出的合并耗时信息可以包括:
第一调用层级1的子函数为“main”,对应的耗时、调用状态及详细信息未知;一个第二调用层级1.1的子函数为“B”,对应的耗时、调用状态及详细信息未知,在该第二调用层级1.1的子函数下嵌套的一个第三调用层级的子函数为“method1”,对应的信息见上述实施例中所述,在该第二调用层级1.1的子函数下嵌套的另一第三调用层级的子函数为“method2”,对应的信息见上述实施例中所述;另一个第二调用层级1.2的子函数为“C”,对应的耗时、调用状态及详细信息未知,在该第二调用层级1.2的子函数下嵌套的一个第三调用层级的子函数为“method3”,对应的信息见上述实施例中所述。
步骤206,输出上述确定的合并耗时信息。
上述确定出的合并耗时信息可以储存为多种格式,比如json或excel等格式。
进一步地,通过上述步骤当获取到目标操作请求对应的合并耗时信息后,还可以将目标操作请求的触发次序与合并耗时信息进行关联,得到关联后的合并耗时信息,然后再储存关联后的合并耗时信息。例如下表1所示,可以储存目标操作请求的标识、触发次序及合并耗时信息之间的对应关系:
表1
在实际应用过程中,通过上述步骤对一个目标操作请求进行处理时,调用的子函数可以如图7所示,先调用一个入口函数,然后再调用三个分支函数Main.A、Main.B和Main.C,其中,在调用分支函数Main.B时,需要调用两个分支函数Main.B.X和Main.B.Y,在调用分支函数Main.C.X和Main.C.Z。通过上述步骤可以输入如下表2所示的合并耗时信息:
表2
通过上述表2中的合并耗时信息,可以得知:子函数B的耗时和子函数C的耗时占比较大;子函数X第一次调用时的耗时为10,第二次调用的耗时为5;子函数C除了调用X和Z外,其它逻辑耗时为15;子函数Z在调用时是异常退出的,耗时为30;目标操作请求的总耗时为100,花在调用子函数A、B和C上的耗时为99,基本耗时正常,无其它环节损失。
可见,通过本实施例的方法可以实现如下的技术效果:
1、在对各个子函数的耗时进行统计时,采用在各个子函数前后关联的耗时统计主函数对子函数的耗时进行统计,无需对应用程序中各个子函数的实际计算代码进行侵入。
2、本实施例中可以通过合并耗时信息展现各个调用层级的子函数的耗时。
3.能够自定义对一个目标操作请求对应的某些子函数进行关注,从而通过在需要关注的子函数前后加入相应的关联代码,关联耗时统计主函数,这样通过耗时统计主函数只会统计这些关注的子函数的耗时。
4、在应用进程根据目标操作请求多次调用相同一个子函数时,能够确定出调用该子函数的调用次数,及每次调用时的耗时。
5、能够展示应用进程对各个子函数调用成功和调用失败的不同耗时。
以下以另一具体的应用实例来说明本发明中耗时统计方法,本发明实施例中的耗时统计系统主要为分布式系统100,该分布式系统可以包括客户端300及多个节点200(接入网络中的任意形式的计算设备,如服务器、用户终端),客户端300与节点200之间通过网络通信的形式连接。
以分布式系统为区块链系统为例,参见图8是本发明实施例提供的分布式系统100应用于区块链系统的一个可选的结构示意图,由多个节点200(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端300形成,节点之间形成组成的点对点(P2P,Peer ToPeer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
参见图8示出的区块链系统中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其它节点,供其它节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括实现耗时统计功能的代码,该耗时统计功能主要包括:
当应用程序对应的应用进程根据目标操作请求调用对应的多个子函数时,分别对调用所述多个子函数的耗时进行统计;分别获取所述多个子函数的调用路径;根据所述多个子函数中各个子函数的耗时和调用路径,确定所述目标操作请求对应的合并耗时信息,所述合并耗时信息中包括所述各个子函数在相应的调用层级中的耗时;输出所述目标操作请求对应的合并耗时信息。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
参见图9为本发明实施例提供的区块结构(Block Structure)一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
本发明实施例还提供一种耗时统计系统,其结构示意图如图10所示,具体可以包括:
统计单元10,用于当应用程序对应的应用进程根据目标操作请求调用对应的多个子函数时,分别对调用所述多个子函数的耗时进行统计。
该统计单元10,具体用于当所述应用进程在根据所述目标操作请求调用任一子函数前,触发耗时统计主函数,通过所述耗时统计主函数进程记录所述任一子函数的起始时间;当所述应用进程成功调用所述任一子函数结束时,触发通过所述耗时统计主函数记录所述任一子函数的成功结束时间;所述耗时统计主函数根据所述起始时间和成功结束时间确定所述任一子函数对应的耗时;若应用进程调用所述任一子函数异常,通过所述耗时统计主函数记录所述任一子函数的异常结束时间;根据所述异常结束时间和起始时间确定所述任一子函数对应的耗时。
路径获取单元11,用于分别获取所述多个子函数的调用路径。
整体耗时单元12,用于根据所述统计单元10统计的多个子函数中各个子函数的耗时和路径获取单元11获取的调用路径,确定所述目标操作请求对应的合并耗时信息,所述合并耗时信息中包括所述各个子函数在相应的调用层级中的耗时。
若所述多个子函数中第一子函数为入口函数,所述多个子函数中的第二子函数为除了所述入口函数之外的其它子函数,所述第二子函数的调用路径包括:从入口函数到第二子函数所经历的所有子函数及所有子函数之间的调用顺序;则该整体耗时单元12,具体用于根据所述第二子函数的调用路径中包括的所有子函数之间的调用顺序,确定所述所有子函数的调用层级,及确定所述所有子函数中某些子函数之间的调用关系;在所述合并耗时信息中储存所述各个子函数的调用层级、耗时及与其它子函数之间的调用关系。
其中,所述所有子函数中的第一子函数对应的调用层级为第一调用层级,所述所有子函数中某些子函数之间的调用关系包括:一个子函数嵌套在另一子函数之下。
该整体耗时单元12,还用于若所述多个子函数中某一子函数的调用路径中:排在第一位调用的子函数不是所述入口函数,则设置所述某一子函数的异常标记。
进一步地,若统计单元10,还用于分别设置所述多个子函数的调用状态,所述调用状态包括:用于指示调用相应子函数成功的信息,或用于指示调用相应子函数失败的信息;则所述整体耗时单元12确定的合并耗时信息中包括所述各个子函数的调用状态。
输出单元13,用于输出所述整体耗时单元12到的目标操作请求对应的合并耗时信息。
进一步地,本实施例的耗时统计系统还可以包括:关联单元14,用于将所述合并耗时信息与所述目标操作请求的触发次序进行关联,得到关联后的合并耗时信息;所述触发次序用于指示所述应用进程启动后触发所述目标操作请求的次数;则输出单元13,用于输出所述关联单元14得到的关联后的合并耗时信息。
在本实施例的耗时统计系统中,统计单元10会在应用进程根据目标操作请求调用对应的多个子函数时,分别对调用多个子函数的耗时进行统计,且路径获取单元11分别获取多个子函数的调用路径,然后整体耗时单元12根据各个子函数的耗时和调用路径,即可确定合并耗时信息,包括各个子函数在相应的调用层级中的耗时,最后输出单元13输出合并耗时信息。在得到合并耗时信息的过程中只涉及到各个子函数的耗时和调用路径,而每一个子函数的耗时和调用路径都比较容易获取到,使得耗时统计的过程比较简单,且在合并耗时信息中可以详细地体现目标操作请求所涉及到的所有子函数的耗时,便于对应用程序的性能进行分析。
本发明实施例还提供一种终端设备,其结构示意图如图11所示,该终端设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessing units,CPU)20(例如,一个或一个以上处理器)和存储器21,一个或一个以上存储应用程序221或数据222的存储介质22(例如一个或一个以上海量存储设备)。其中,存储器21和存储介质22可以是短暂存储或持久存储。存储在存储介质22的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对终端设备中的一系列指令操作。更进一步地,中央处理器20可以设置为与存储介质22通信,在终端设备上执行存储介质22中的一系列指令操作。
具体地,在存储介质22中储存的应用程序221包括耗时统计的应用程序,且该程序可以包括上述耗时统计系统中的统计单元10,路径获取单元11,整体耗时单元12,输出单元13和关联单元14,在此不进行赘述。更进一步地,中央处理器20可以设置为与存储介质22通信,在终端设备上执行存储介质22中储存的列表处理的应用程序对应的一系列操作。
终端设备还可以包括一个或一个以上电源23,一个或一个以上有线或无线网络接口24,一个或一个以上输入输出接口25,和/或,一个或一个以上操作系统223,例如WindowsServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述方法实施例中所述的由耗时统计系统所执行的步骤可以基于该图11所示的终端设备的结构。
进一步地,本发明实施例另一方面还提供一种计算机可读存储介质,所述计算机可读存储介质储存多个计算机程序,所述计算机程序适于由处理器加载并执行如上述耗时统计系统所执行的耗时统计方法。
本发明实施例另一方面还提供一种终端设备,包括处理器和存储器;
所述存储器用于储存多个计算机程序,所述计算机程序用于由处理器加载并执行如上述耗时统计系统所执行的耗时统计方法;所述处理器,用于实现所述多个计算机程序中的各个计算机程序。
另外,根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供的耗时统计方法。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM)、随机存取存储器(RAM)、磁盘或光盘等。
以上对本发明实施例所提供的一种耗时统计方法、系统及存储介质和终端设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种耗时统计方法,其特征在于,包括:
当应用程序对应的应用进程根据目标操作请求调用对应的多个子函数时,分别对调用所述多个子函数的耗时进行统计;
分别获取所述多个子函数的调用路径;
根据所述多个子函数中各个子函数的耗时和调用路径,确定所述目标操作请求对应的合并耗时信息,所述合并耗时信息中包括所述各个子函数在相应的调用层级中的耗时;
输出所述目标操作请求对应的合并耗时信息。
2.如权利要求1所述的方法,其特征在于,所述分别对调用所述多个子函数的耗时进行统计,具体包括:
当所述应用进程在根据所述目标操作请求调用任一子函数前,触发耗时统计主函数,通过所述耗时统计主函数记录所述任一子函数的起始时间;
当所述应用进程成功调用所述任一子函数结束时,触发所述耗时统计主函数,通过所述耗时统计主函数记录所述任一子函数的成功结束时间;
所述耗时统计主函数根据所述起始时间和成功结束时间确定所述任一子函数对应的耗时。
3.如权利要求2所述的方法,其特征在于,若应用进程调用所述任一子函数异常,通过所述耗时统计主函数记录所述任一子函数的异常结束时间;
根据所述异常结束时间和起始时间确定所述任一子函数对应的耗时。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
通过所述耗时统计主函数分别设置所述多个子函数的调用状态,所述调用状态包括:用于指示调用相应子函数成功的信息,或用于指示调用相应子函数失败的信息;
则所述合并耗时信息中包括所述各个子函数的调用状态。
5.如权利要求1至4任一项所述的方法,其特征在于,若所述应用进程根据目标操作请求多次调用同一子函数;
所述分别获取所述多个子函数的调用路径,具体包括:分别获取每次调用所述同一子函数的函数路径。
6.如权利要求1至4任一项所述的方法,其特征在于,所述多个子函数中第一子函数为入口函数,所述多个子函数中的第二子函数为除了所述入口函数之外的其它子函数,所述第二子函数的调用路径包括:从入口函数到第二子函数所经历的所有子函数及所有子函数之间的调用顺序;
则所述根据所述多个子函数中各个子函数的耗时和调用路径,确定所述目标操作请求对应的合并耗时信息,具体包括:
根据所述第二子函数的调用路径中包括的所有子函数之间的调用顺序,确定所述所有子函数的调用层级,及确定所述所有子函数中某些子函数之间的调用关系;
在所述合并耗时信息中储存所述各个子函数的调用层级、耗时及与其它子函数之间的调用关系。
7.如权利要求6所述的方法,其特征在于,所述所有子函数中的第一子函数对应的调用层级为第一调用层级,所述所有子函数中某些子函数之间的调用关系包括:一个子函数嵌套在另一子函数之下。
8.如权利要求6所述的方法,其特征在于,若所述多个子函数中某一子函数的调用路径中:排在第一位调用的子函数不是所述入口函数,则设置所述某一子函数的异常标记。
9.如权利要求1至4任一项所述的方法,其特征在于,所述输出所述目标操作请求对应的合并耗时信息之前,还包括:
将所述合并耗时信息与所述目标操作请求的触发次序进行关联,得到关联后的合并耗时信息;所述触发次序用于指示所述应用进程启动后触发所述目标操作请求的次数;
所述输出所述目标操作请求对应的合并耗时信息,具体包括:输出所述关联后的合并耗时信息。
10.一种耗时统计系统,其特征在于,包括:
统计单元,用于当应用程序对应的应用进程根据目标操作请求调用对应的多个子函数时,分别对调用所述多个子函数的耗时进行统计;
路径获取单元,用于分别获取所述多个子函数的调用路径;
整体耗时单元,用于根据所述多个子函数中各个子函数的耗时和调用路径,确定所述目标操作请求对应的合并耗时信息,所述合并耗时信息中包括所述各个子函数在相应的调用层级中的耗时;
输出单元,用于输出所述目标操作请求对应的合并耗时信息。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质储存多个计算机程序,所述计算机程序适于由处理器加载并执行如权利要求1至9任一项所述的耗时统计方法。
12.一种终端设备,其特征在于,包括处理器和存储器;
所述存储器用于储存多个计算机程序,所述计算机程序用于由处理器加载并执行如权利要求1至9任一项所述的耗时统计方法;所述处理器,用于实现所述多个计算机程序中的各个计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210349318.5A CN116932342A (zh) | 2022-04-01 | 2022-04-01 | 一种耗时统计方法、系统及存储介质和终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210349318.5A CN116932342A (zh) | 2022-04-01 | 2022-04-01 | 一种耗时统计方法、系统及存储介质和终端设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116932342A true CN116932342A (zh) | 2023-10-24 |
Family
ID=88376115
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210349318.5A Pending CN116932342A (zh) | 2022-04-01 | 2022-04-01 | 一种耗时统计方法、系统及存储介质和终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116932342A (zh) |
-
2022
- 2022-04-01 CN CN202210349318.5A patent/CN116932342A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2023040364A1 (zh) | 共识方法、装置及区块链系统 | |
CN117278434A (zh) | 流量回放方法、装置、电子设备 | |
CN116155771A (zh) | 网络异常测试方法、装置、设备、存储介质和程序 | |
CN110597922A (zh) | 数据处理方法、装置、终端及存储介质 | |
CN114745295A (zh) | 数据采集方法、装置、设备和可读存储介质 | |
CN111125118A (zh) | 关联数据查询方法、装置、设备及介质 | |
CN112202647B (zh) | 区块链网络中的测试方法、装置及测试设备 | |
CN109087107B (zh) | 基于分布式内存数据库的实时监控方法、系统及电子设备 | |
CN110515819A (zh) | 性能测试方法、电子设备、调度系统及介质 | |
CN112433908B (zh) | 确定检测服务器的间隔时间的方法、系统、设备及介质 | |
CN116932342A (zh) | 一种耗时统计方法、系统及存储介质和终端设备 | |
CN116974874A (zh) | 数据库的测试方法、装置、电子设备及可读存储介质 | |
CN110909072B (zh) | 一种数据表建立方法、装置及设备 | |
CN109389271B (zh) | 应用性能管理方法及系统 | |
CN112925663B (zh) | 业务数据的计算方法和装置 | |
CN110930163B (zh) | 一种房源委托业务的实现方法、系统及存储介质 | |
CN113986955B (zh) | 业务链的确定方法、装置、电子设备及介质 | |
CN114428723A (zh) | 测试系统、系统测试方法、相关设备及存储介质 | |
CN112799797A (zh) | 一种任务管理的方法和装置 | |
CN114812695B (zh) | 一种产品测试方法、装置、计算机设备和存储介质 | |
CN114745421B (zh) | 裂变路径数据的记录方法、装置、服务器及存储介质 | |
CN116804938A (zh) | 一种传输探测方法、装置及存储介质和终端设备 | |
CN113342795B (zh) | 应用程序中数据核对方法、装置、电子设备及存储介质 | |
CN113890846A (zh) | 一种配网检测方法、装置、系统及存储介质和终端设备 | |
CN115774739A (zh) | 一种交易数据的追踪方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |