一种性能分析方法及装置、服务器和可读存储介质与流程

文档序号:15462349发布日期:2018-09-18 18:28阅读:111来源:国知局

本发明涉及计算机技术领域,特别涉及一种性能分析方法及装置、服务器和可读存储介质。



背景技术:

在现有技术中,常采用Traceview工具来进行数据的采集及分析,进而确定被测应用的性能。但是,该工具会对Dalvik虚拟机中每个调用的函数都去获取耗时(或运行)数据,这样会因为耗时数据的获取而导致被测应用非常卡顿,从而导致应用性能的分析精度低。也就是说,现有不光获取应用本身的函数,还会获取系统底层的函数(而系统底层的函数即便存在异常并不能为应用所优化),致使应用性能分析精度低。

可见,现有的性能分析方法精度低。



技术实现要素:

本发明实施例提供一种性能分析方法及装置、服务器和可读存储介质,用于解决现有的性能分析方法精度低的技术问题,提高了性能分析的精度。

一方面,本发明实施例提供了一种性能分析方法,应用于一服务器,所述方法包括:

确定待检测程序本身代码中的至少一个关注函数;

获得所述至少一个关注函数的运行数据;

基于所述运行数据,确定所述待检测程序的性能。

可选地,所述确定待检测程序本身代码中的至少一个关注函数,包括:

确定所述待检测程序本身代码中的全部函数;

将所述全部函数中部分或全部作为所述至少一个关注函数。

可选地,在所述确定待检测程序本身代码中的至少一个关注函数之后,所述方法还包括:

对所述至少一个关注函数中的每个关注函数注入统计代码,并将统计代码软件开发工具包SDK打包到所述待检测程序,以使所述待检测程序运行时,所述统计代码通过调用所述统计代码SDK,生成所述至少一个关注函数的运行数据。

可选地,所述对所述至少一个关注函数中的每个关注函数注入统计代码,包括:

将所述待检测应用的N个源代码中的每个源代码均编译为至少一个.class文件,共获得M个.class文件,其中,N为正整数,M为不小于N的正整数;

判断所述M个.class文件中是否有预设函数配置文件;

若为否,将所述M个.class文件中的第一函数集合生成函数字典文件,并将所述第一函数集合中的每个函数运行的开始位置和结束位置均注入所述统计代码,其中,所述第一函数集合中的每个函数均为关注函数。

可选地,在所述判断所述M个.class文件中是否有预设函数配置文件之后,所述方法还包括:

若所述M个.class文件中有所述预设函数配置文件,对所述预设函数配置文件中的第二函数集合生成函数字典文件,并将所述第二函数集合中的每个函数运行的开始位置和结束位置均注入所述统计代码,其中,所述第二函数集合中的每个函数均为关注函数。

可选地,所述基于所述运行数据,确定所述待检测程序的性能,包括:

使用所述函数字典文件分析所述运行数据,确定出至少包括运行堆栈和运行耗时时长的函数运行信息;

基于所述函数运行信息,确定所述待检测程序的性能。

另一方面,本发明实施例还提供了一种性能分析装置,应用于一服务器,所述装置包括:

第一确定单元,用于确定待检测程序本身代码中的至少一个关注函数;

获得单元,用于获得所述至少一个关注函数的运行数据;

第二确定单元,基于所述运行数据,确定所述待检测程序的性能。

可选地,所述第一确定单元用于:

确定所述待检测程序本身代码中的全部函数;

将所述全部函数中部分或全部作为所述至少一个关注函数。

可选地,在所述确定待检测程序本身代码中的至少一个关注函数之后,所述装置还包括:

处理单元,用于对所述至少一个关注函数中的每个关注函数注入统计代码,并将统计代码软件开发工具包SDK打包到所述待检测程序,以使所述待检测程序运行时,所述统计代码通过调用所述统计代码SDK,生成所述至少一个关注函数的运行数据。

可选地,所述处理单元还用于:

将所述待检测应用的N个源代码中的每个源代码均编译为至少一个.class文件,共获得M个.class文件,其中,N为正整数,M为不小于N的正整数;

判断所述M个.class文件中是否有预设函数配置文件;

若为否,将所述M个.class文件中的第一函数集合生成函数字典文件,并将所述第一函数集合中的每个函数运行的开始位置和结束位置均注入所述统计代码,其中,所述第一函数集合中的每个函数均为关注函数。

可选地,在所述判断所述M个.class文件中是否有预设函数配置文件之后,所述处理单元还用于:

若所述M个.class文件中有所述预设函数配置文件,对所述预设函数配置文件中的第二函数集合生成函数字典文件,并将所述第二函数集合中的每个函数运行的开始位置和结束位置均注入所述统计代码,其中,所述第二函数集合中的每个函数均为关注函数。

可选地,所述处理单元还用于:

使用所述函数字典文件分析所述运行数据,确定出至少包括运行堆栈和运行耗时时长的函数运行信息;

基于所述函数运行信息,确定所述待检测程序的性能。

另一方面,本发明实施例还提供了一种服务器,所述服务器包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如上所述的性能分析方法的步骤。

另一方面,本发明实施例还提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的性能分析方法的步骤。

本发明实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:

在本发明实施例的技术方案中,通过确定待检测程序本身代码中的至少一个关注函数;获得所述至少一个关注函数的运行数据;基于所述运行数据,确定所述待检测程序的性能。也就是说,仅通过获取待检测程序本身代码中的至少一个关注函数的运行数据来确定待检测程序的性能。相较于现有技术中不光获取程序本身代码中的函数的运行数据,还要获取系统底层的函数的运行数据,有效解决了现有的性能分析方法精度低的技术问题,提高了性能分析的精度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。

图1为本发明实施例一中提供的一种性能分析方法的方法流程图;

图2为本发明实施例一中提供的一种性能分析方法中步骤S101的步骤流程图;

图3为本发明实施例一中提供的一种性能分析方法中步骤:对所述至少一个关注函数中的每个关注函数注入统计代码的方法流程图;

图4为本发明实施例一中提供的一种性能分析方法中步骤S103的方法流程图;

图5为本发明实施例二提供的一种性能分析装置的结构示意图。

具体实施方式

本发明实施例提供一种性能分析方法及装置、服务器和可读存储介质,用于解决现有的性能分析方法精度低的技术问题,提高了性能分析的精度。

本发明实施例中的技术方案为解决上述的技术问题,总体思路如下:

一种性能分析方法,应用于一服务器,所述方法包括:

确定待检测程序本身代码中的至少一个关注函数;

获得所述至少一个关注函数的运行数据;

基于所述运行数据,确定所述待检测程序的性能。

在本发明实施例的技术方案中,通过确定待检测程序本身代码中的至少一个关注函数;获得所述至少一个关注函数的运行数据;基于所述运行数据,确定所述待检测程序的性能。也就是说,仅通过获取待检测程序本身代码中的至少一个关注函数的运行数据来确定待检测程序的性能。相较于现有技术中不光获取程序本身代码中的函数的运行数据,还要获取系统底层的函数的运行数据,有效解决了现有的性能分析方法精度低的技术问题,提高了性能分析的精度。

本发明的说明书和权利要求书及上述附图中的“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本人中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

为了更好的理解上述技术方案,下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。

实施例一

请参考图1,本发明实施例一提供了一种性能分析方法,应用于一服务器,所述方法包括:

S101:确定待检测程序本身代码中的至少一个关注函数;

S102:获得所述至少一个关注函数的运行数据;

S103:基于所述运行数据,确定所述待检测程序的性能。

在具体实施过程中,步骤S101至步骤S103的具体实现过程如下:

首先,确定待检测程序本身代码中的至少一个关注函数。其中,所述待检测程序具体可以是待检测应用对应的程序,还可以是除此之外的任意程序。然后,获得所述至少一个关注函数的运行数据。比如,所述待检测程序运行时,终端设备获得所述待检测程序的运行数据,进一步地,所述终端设备获得所述待检测程序本身代码中的至少一个关注函数的运行数据。所述终端设备可以将所述运行数据通过诸如本地存储、云端存储等方式传输给所述服务器,从而保证所述服务器获得所述至少一个关注函数的运行数据。当然,本领域的技术人员,还可以根据用户的实际使用习惯来设计获得所述至少一个关注函数的运行数据的方案,在此就不一一举例说明了。然后,所述服务器便可以基于所述运行数据进一步地确定所述待检测程序的性能。

在本发明实施例中,请参考图2所示,步骤S101:确定待检测程序本身代码中的至少一个关注函数,包括:

S201:确定所述待检测程序本身代码中的全部函数;

S202:将所述全部函数中部分或全部作为所述至少一个关注函数。

在具体实施过程中,步骤S201至步骤S202的具体实现过程如下:

首先,确定所述待检测程序本身代码中的全部函数。然后,将所述全部函数中的部分或全部作为所述至少一个关注函数。也就是说,在对所述待检测程序的性能进行分析时,可以从所述待检测程序本身代码中的全部函数中的部分或全部作为关注函数。

在本发明实施例中,在步骤S101:确定待检测程序本身代码中的至少一个关注函数之后,所述方法还包括:

对所述至少一个关注函数中的每个关注函数注入统计代码,并将统计代码软件开发工具包SDK打包到所述待检测程序,以使所述待检测程序运行时,所述统计代码通过调用所述统计代码SDK,生成所述至少一个关注函数的运行数据。也就是说,在程序编译过程中,通过对所述至少一个关注函数中的每个关注函数注入统计代码,从而修改所述至少一个关注函数。并将统计代码软件开发工具包SDK打包到所述待检测程序,从而使得所述待检测程序运行时,所述统计代码通过调用所述统计代码SDK,生成所述至少一个关注函数的运行数据。在该种情况下,对所述待检测程序本身代码中的全部函数进行检测。

在本发明实施例中,为了进一步地提高性能分析的精度,请参考图3所示,步骤:对所述至少一个关注函数中的每个关注函数注入统计代码,包括:

S301:将所述待检测应用的N个源代码中的每个源代码均编译为至少一个.class文件,共获得M个.class文件,其中,N为正整数,M为不小于N的正整数;

S302:判断所述M个.class文件中是否有预设函数配置文件;

S303:若为否,将所述M个.class文件中的第一函数集合生成函数字典文件,并将所述第一函数集合中的每个函数运行的开始位置和结束位置均注入所述统计代码,其中,所述第一函数集合中的每个函数均为关注函数。

在具体实施过程中,步骤S301至步骤S303的具体实现过程如下:

首先,将所述待检测应用的N个源代码中的每个源代码均编译为至少一个.class文件,这样的话,对所述N个源代码进行编译后,便可以获得不小于N的正整数M个.class文件。然后,判断所述M个.class文件中是否有预设函数配置文件,其中,所述预设函数配置文件用于唯一标识对应的函数,所述预设函数配置文件中可以包括多个函数。具体来讲,可以通过设置所述预设函数配置文件来将对应函数确定为关注函数。在具体实施过程中,本领域的技术人员可以根据实际需要来预先设置所述预设函数配置文件。在具体实施过程中,若所述M个.class文件中没有预设函数配置文件,则将所述M个.class文件中对应的第一函数集合生成函数字典文件,并将所述第一函数集合中的每个函数运行的开始位置和结束位置均诸如所述统计代码,其中,所述第一函数集合中的每个函数均为关注函数。也就是说,在所述M个.class文件中无配置文件时,则所述M个.class文件中的所有的函数均为关注函数,将所有的关注函数生成函数字典文件,并将每个关注函数的运行对应代码的开始位置,以及结束运行对应代码的结束位置均注入所述统计代码。如此以来,在所述待检测程序运行时,所述服务器端便可以获得所有关注函数对应的运行数据,进而提高性能分析的精度。

在具体实施过程中,通过对获得的所述待检测程序中本身代码中的某些特定函数的运行数据进行检测,从而进一步地提高性能分析的精度,具体来讲,可以是用户一开始便知道哪段函数有问题,直接针对特定的函数进行检测。另外一种是对全部函数进行检测,从中筛选出部分函数(比如出现bug的一段代码),再对该部分代码中的某些函数进行检测,从而提高了性能分析的精度,当然,本领域的技术人员还可以根据用户的实际使用习惯来设置对应用性能进行分析的方案,在此就不一一举例说明了。

在本发明实施例中,为了进一步地提高所述服务器的性能分析精度,在步骤S302:判断所述M个.class文件中是否有预设函数配置文件之后,所述方法还包括:

若所述M个.class文件中有所述预设函数配置文件,对所述预设函数配置文件中的第二函数集合生成函数字典文件,并将所述第二函数集合中的每个函数运行的开始位置和结束位置均注入所述统计代码,其中,所述第二函数集合中的每个函数均为关注函数。

在具体实施过程中,若所述M个.class文件中有所述预设函数配置文件,对所述预设函数配置文件中的第二函数集合生成函数字典文件,并将所述第二函数集合中的每个函数运行的开始位置和结束位置均注入所述统计代码,也就是说,若所述M个.class文件中有所述预设函数配置文件,则将预设函数配置文件中的函数确定为关注函数,进一步地将这些关注函数生成函数字典文件,并将所述预设函数配置文件中的第二函数集合中每个函数运行的开始位置和结束位置均注入所述统计代码,如此以来,在所述待检测程序运行时,所述服务器端便可以获得部分关注函数对应的运行数据,进而提高性能分析的精度。

在本发明实施例中,请参考图4,步骤S103:基于所述运行数据,确定所述待检测程序的性能,包括:

S401:使用所述函数字典文件分析所述运行数据,确定出至少包括运行堆栈和运行耗时时长的函数运行信息;

S402:基于所述函数运行信息,确定所述待检测程序的性能。

在具体实施过程中,步骤S401至步骤S202的具体实现过程如下:

首先,在所述待检测程序在所述终端设备上面运行时,所述终端设备获得所述至少一个关注函数的运行数据。然后,所述服务器接收所述终端设备发送的所述运行数据。进一步地,所述服务器使用所述函数字典文件分析所述运行数据,从而确定出所述至少一个关注函数对应的至少包括运行堆栈和运行耗时时长的函数运行信息。进一步地,基于所述函数运行信息,确定所述待检测程序的性能。其中,所述运行堆栈能够确定函数调用的次数,比如,通过获得的运行堆栈信息确定出某个关注函数A一直在调用自己,再比如,通过获得某个关注函数B的耗时时长,发现其大于某个预设时长,从而确定出关注函数对应的待检测程序的当前性能。当然,本领域的技术人员还可以根据用户的实际使用习惯来确定出除所述运行堆栈和所述运行耗时时长外的函数运行信息,在此就不一一举例说明了。

实施例二

基于与本发明实施例一同样的发明构思,请参考图5,本发明实施例还提供了一种性能分析装置,应用于一服务器,所述装置包括:

第一确定单元10,用于确定待检测程序本身代码中的至少一个关注函数;

获得单元20,用于获得所述至少一个关注函数的运行数据;

第二确定单元30,基于所述运行数据,确定所述待检测程序的性能。

在本发明实施例中,第一确定单元10用于:

确定所述待检测程序本身代码中的全部函数;

将所述全部函数中部分或全部作为所述至少一个关注函数。

在本发明实施例中,在所述确定待检测程序本身代码中的至少一个关注函数之后,所述装置还包括:

处理单元,用于对所述至少一个关注函数中的每个关注函数注入统计代码,并将统计代码软件开发工具包SDK打包到所述待检测程序,以使所述待检测程序运行时,所述统计代码通过调用所述统计代码SDK,生成所述至少一个关注函数的运行数据。

在本发明实施例中,所述处理单元还用于:

将所述待检测应用的N个源代码中的每个源代码均编译为至少一个.class文件,共获得M个.class文件,其中,N为正整数,M为不小于N的正整数;

判断所述M个.class文件中是否有预设函数配置文件;

若为否,将所述M个.class文件中的第一函数集合生成函数字典文件,并将所述第一函数集合中的每个函数运行的开始位置和结束位置均注入所述统计代码,其中,所述第一函数集合中的每个函数均为关注函数。

在本发明实施例中,在所述判断所述M个.class文件中是否有预设函数配置文件之后,所述处理单元还用于:

若所述M个.class文件中有所述预设函数配置文件,对所述预设函数配置文件中的第二函数集合生成函数字典文件,并将所述第二函数集合中的每个函数运行的开始位置和结束位置均注入所述统计代码,其中,所述第二函数集合中的每个函数均为关注函数。

在本发明实施例中,所述处理单元还用于:

使用所述函数字典文件分析所述运行数据,确定出至少包括运行堆栈和运行耗时时长的函数运行信息;

基于所述函数运行信息,确定所述待检测程序的性能。

本发明实施例的又一方面提供了一种服务器,所述服务器包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,例如:确定待检测程序本身代码中的至少一个关注函数;获得所述至少一个关注函数的运行数据;基于所述运行数据,确定所述待检测程序的性能。

所述处理器执行所述计算机程序时实现上述各方面所述的方法实施例中的步骤,例如图1所示的方法步骤。或者,所述处理器执行所述计算机程序时实现上述各装置实施例中各单元的功能。

示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述性能分析装置/服务器中的执行过程。例如,所述计算机程序可以被分割成第一确定单元,获得单元,第二确定单元,各模块具体功能如下:第一确定单元,用于确定待检测程序本身代码中的至少一个关注函数;获得单元,用于获得所述至少一个关注函数的运行数据;第二确定单元,基于所述运行数据,确定所述待检测程序的性能。

所述性能分析装置/服务器可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述性能分析装置/服务器可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述示意图仅仅是所述性能分析装置/服务器的示例,并不构成对所述性能分析装置/服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述性能分析装置/服务器还可以包括输入输出设备、网络接入设备、总线等。

所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述性能分析装置/服务器的控制中心,利用各种接口和线路连接整个所述性能分析装置/服务器的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述性能分析装置/服务器的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

本发明实施例的又一方面提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的性能分析方法的步骤。

所述性能分析装置/服务器集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

在本发明实施例的技术方案中,通过确定待检测程序本身代码中的至少一个关注函数;获得所述至少一个关注函数的运行数据;基于所述运行数据,确定所述待检测程序的性能。也就是说,仅通过获取待检测程序本身代码中的至少一个关注函数的运行数据来确定待检测程序的性能。相较于现有技术中不光获取程序本身代码中的函数的运行数据,还要获取系统底层的函数的运行数据,有效解决了现有的性能分析方法精度低的技术问题,提高了性能分析的精度。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1