一种基于后端切面技术的方法级性能分析方法与流程

文档序号:18141994发布日期:2019-07-10 11:10阅读:631来源:国知局
一种基于后端切面技术的方法级性能分析方法与流程
本发明涉及一种基于后端切面技术的方法级性能分析方法,属于电子信息
技术领域

背景技术
:在后端应用的架构逐渐被springboot+ssm替代的时候,在此软件架构下常用的性能分析方法只是对应用的请求响应进行性能分析,这种分析一般只能分析出系统的性能瓶颈和某些接口的性能瓶颈,而不能分析出接口内部逻辑的性能瓶颈,特别是程序内部方法会出现交叉引用的情况,这样传统的性能分析方法就无法准确的定位到准确的性能瓶颈点,因此需要一种分析方法对执行方法进行性能分析。技术实现要素:针对上述现有技术的不足,本发明提供一种基于后端切面技术的方法级性能分析方法,能够透过接口响应情况,分析内部方法运行情况,获取方法级性能分析报告。为实现上述目的,本发明采用如下技术方案:一种基于后端切面技术的方法级性能分析方法,包括如下步骤:步骤1:通过spring切面技术获取一次请求下指定方法路径中执行过的所有方法的执行情况,进而获取该次请求的运行情况;步骤2:对请求的运行情况进行计数分析统计并提取相关数据接口;步骤3:定时通过数据接口收集性能数据;步骤4:生成性能分析报告。优选的,所述执行情况包括事件类型、运行方法路径、触发时间点、运行状态、方法类型。优选的,所述运行情况包括一次请求下指定方法路径中执行过的所有方法的运行方法路径、运行时间、运行状态、方法类型。优选的,步骤1包括:步骤1.1:通过spring切面拦截所有spring容器内的方法,每一个运行方法都有各自的前置和后置,将一个请求当成一个进程,每个方法为进程里的执行单元;步骤1.2:创建一个方法执行情况的队列,该队列将存储每一次请求的后端执行的所有方法的前置和后置的触发时间点,前置和后置的触发时间点分开存储;步骤1.3:当方法开始执行的前置事件触发时,先判断是否是要拦截的指定方法路径,否的话忽略该方法的执行情况,是的话将该方法的执行情况添加到队列里;步骤1.4:当方法开始执行的后置时间触发时,先判断是否是要拦截的指定方法路径,否的话忽略该方法的执行情况,是的话将该方法的执行情况添加到队列里,同时判断队列的第一个元素中的对象方法和当前方法是否一致,不一致的话进入下一个方法的循环中,一致的话则循环退出,获取当前请求的运行情况。优选的,运行时间的计算步骤包括:步骤2.1:从所述队列的第一个元素对应的方法的前置进行递归,往下查找到该方法的后置,将该方法前置和后置的触发时间相减得到该方法的运行时间;步骤2.2:将上一步中递归绕过的方法重新组装成一个队列进行上一步的操作;步骤2.3:当循环递归后队列为空时,得到所有方法的运行时间。优选的,步骤2中,分析统计指标有如下几个指标包括:调用次数,异常次数,平均时长,最大时长,数据库操作数。优选的,所述方法包括入口方法,过程方法,数据库操作方法。有益效果:本发明借助spring动态切面技术,对系统内部方法的运行次数,运行时间,运行状态进行记录分析,通过记录分析获取一份方法级性能分析报告,能够准确的定位到系统准确的性能瓶颈点。附图说明图1为本方法中实施例提供的基于后端切面技术的方法级性能分析的工作流程图;图2为本方法中实施例提供的获取方法的执行情况的流程图;图3为本方法中实施例提供的请求的运行情况计算规则示意图;图4为本方法中实施例单个请求运行情况示意图;图5为本方法中实施例提供的入口方法调用树性能统计报告示意图。具体实施方式下面结合实例对本发明做更进一步的解释。本发明主要实施流程如下,相关流程图见图1。1)通过spring切面技术获取从http接口入口处方法到数据库操作类的所有方法运行情况。在实施过程中将方法分为三种类型:入口方法(controller操作方法)、过程方法(service操作方法)和数据库操作方法(dao操作方法),具体方法运行情况如图4。图4中①代表入口方法、②代表过程方法、③代表数据库操作方法。同时每一条运行情况树中的每一个方法数据内包含:运行状态、方法名、运行时间以及各运行方法的上下游关系。通过spring切面技术获取所有方法的执行情况以及获取请求的运行情况的步骤如下(图2):a)通过spring切面拦截所有spring容器内的方法,每一个运行方法都有各自的前置和后置。b)创建一个方法执行情况的队列,该队列将存储每一次请求的后端执行的所有方法的前置和后置的触发时间点,前置和后置的触发时间点分开存储。c)每一次请求都有多个方法会被调用,一个请求当成一个进程,每个方法为进程里的执行单元。d)当方法开始执行的前置事件触发时,先判断是否是要拦截的指定方法路径,否的话忽略该方法的执行情况,是的话将该方法的执行情况添加到队列里。方法执行情况包括:事件类型(前置事件/后置事件)、运行方法路径、触发时间点、运行状态、方法类型。e)当方法开始执行的后置时间触发时,也需要先判断是否是要拦截的指定方法路径,否的话忽略该方法的执行情况,是的话将该方法的执行情况添加到队列里,同时判断队列的第一个元素中的对象方法和当前方法是否一致,不一致的话进入下一个方法的循环中,一致的话则循环退出,获取当前请求的运行情况。f)运行时间计算规则如下,计算规则示意图见图3:i)由于每个方法在队列都有前置和后置,从队列的第一个元素对应的方法的前置进行递归,往下查找到相同方法的后置事件类型,将这两个的触发时间相减就获取了一级方法的运行时间。每一级的运行情况包括运行时间、运行状态、运行方法路径,方法类型等参数。ii)将上一步中递归绕过的方法重新组装成一个队列进行上一步的操作,这一步骤的结果级别低于上一个运行情况一个级别。iii)当循环递归后队列为空时,所有方法的运行时间就计算出来了,实例图见图4。2)对请求的运行情况进行计数分析统计,分析统计指标有如下几个指标:调用次数(callnum),异常次数(errornum),平均时长(avgtime),最大时长(maxtime),数据库操作数(daonum)等。通过图4中的运行情况进行计数统计,每个方法每出现一次则调用次数加一,同时如每个方法前缀非[ok]时则异常次数加一,如当前方法为入口方法,同时其子方法存在数据库操作方法时,则数据库操作数加所有子数据库操作方法的次数。同时每一个方法都存在一个总运行时长和最大时长,总时长为所有该方法执行时间的累计总和,最大时长为该方法的所有运行时间最大的时间。通过每个方法的总运行时长除以总调用次数获取平均时长。3)将上一步获取的业务指标实时保存到内存中,同时提供相应的外部接口外放该业务指标,以方便生成相应的性能报告。性能测试报告包含如下几种格式:入口方法性能统计报告:据库操作方法性能统计报告:统计维度方法名调用次数异常次数平均时长最大时长统计维度分为:一分钟、五分钟、十五分钟、全部,数据采集采集频率为每分钟一次。默认采集的性能数据为全量数据,其他三种维度都是通过运算获取。入口方法调用树性能统计报告,实例见图5:方法树调用次数异常次数平均时长最大时长每一个入口方法都有4个单独的表格树分析报告,4个同样分别为一分钟、五分钟、十五分钟、全部。以上为本发明的技术实施例和技术特点,仅用于说明本发明的技术方案而非限制。然而本领域技术人员仍可能基于本发明的教示和揭示内容而作出对本发明的技术方案的修改和等同替换。因此,本发明的保护范围应不限于实施例所揭示的内容,而应包括各种不背离本发明的替代和修正,并为上述权利要求书所涵盖。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1