CN107656849B - 一种软件系统性能问题定位方法以及装置 - Google Patents
一种软件系统性能问题定位方法以及装置 Download PDFInfo
- Publication number
- CN107656849B CN107656849B CN201710898521.7A CN201710898521A CN107656849B CN 107656849 B CN107656849 B CN 107656849B CN 201710898521 A CN201710898521 A CN 201710898521A CN 107656849 B CN107656849 B CN 107656849B
- Authority
- CN
- China
- Prior art keywords
- monitoring
- software system
- agent program
- user
- methods
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- 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/3476—Data logging
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及计算机网络技术领域,尤其涉及软件系统性能问题定位方法及装置,用以提高软件系统性能问题定位的效率。软件系统的启动程序中指定了待调用的代理Agent程序,在Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数;该方法包括:在启动所述软件系统后,获取用户为所述Agent程序的监控参数配置的监控参数值;若根据用户配置的监控参数值确定用户选择了启动监控,则调用所述Agent程序对所述软件系统执行的多个方法进行监控,得到监控结果;所述监控结果中包括方法执行时长;输出所述监控结果,以便用户基于所述监控结果定位所述软件系统中存在性能问题的方法。
Description
技术领域
本申请涉及计算机软件技术领域,尤其涉及一种软件系统性能问题定位方法以及装置。
背景技术
软件系统在运行的过程中,有时会出现中央处理器(Central Processing Unit,CPU)或内存占用长时间居高不下,系统请求响应变慢等性能问题。常见的导致系统性能出现问题的原因有:死循环或其他耗时逻辑,文件读写等频繁的输入/输出(Input/Output,I/O)操作,不当的锁保护导致的线程等待,频繁的申请较大的内存等。当用户急需要解决上线软件的这类性能问题时,如何快速的定位这类性能问题就变得非常重要。除此之外,在对软件系统进行测试的过程中,性能测试也是很重要的一个环节,如何对系统进行性能监控,找到系统的性能瓶颈,也即在上线前定位到系统的性能问题,也是很多开发人员需要去做的事情。
目前,在对软件系统的性能问题进行定位的时候,一般是基于对排除故障(Debug)日志进行分析来实现的。比如,软件系统在方法入和方法出的时候,分别打印一条Debug日志;当软件系统出现性能问题后,对相关Debug日志进行过滤,然后使用过滤后的Debug日志进行性能问题的定位。
采用上述方式,为了定位的全面性,软件系统中所有类的所有方法必须有入方法和出方法的Debug日志。由于针对每个方法都要记录对应的Debug日志,而对一个软件系统来说,其所包括的类的数量是比较庞大的,每个类又包含了多个方法,这就导致了最终所产生的Debug日志的数据量非常庞大,分析Debug日志的工作量会比较大,进而导致进行软件系统性能问题定位的效率较低。
发明内容
本申请实施例提供一种软件系统性能问题定位方法及装置,用以对软件系统的性能问题进行定位,以解决上述问题。
第一方面,提供一种软件系统性能问题定位方法,所述软件系统的启动程序中指定了待调用的代理Agent程序,在所述Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数;该方法包括:
在启动所述软件系统后,获取用户为所述Agent程序的监控参数配置的监控参数值;
若根据用户配置的监控参数值确定用户选择了启动监控,则调用所述Agent程序对所述软件系统执行的多个方法进行监控,得到监控结果;所述监控结果中包括方法执行时长;
输出所述监控结果,以便用户基于所述监控结果定位所述软件系统中存在性能问题的方法。
第二方面,提供一种软件系统性能问题定位装置,所述软件系统的启动程序中指定了待调用的代理Agent程序,在所述Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数;该装置包括:
获取模块,用于在启动所述软件系统后,获取用户为所述Agent程序的监控参数配置的监控参数值;
监控模块,用于在根据用户配置的监控参数值确定用户选择了启动监控时,调用所述Agent程序对所述软件系统执行的多个方法进行监控,得到监控结果;所述监控结果中包括方法执行时长;
输出模块,用于输出所述监控结果,以便用户基于所述监控结果定位所述软件系统中存在性能问题的方法。
第三方面,提供一种软件系统性能问题定位装置,该软件系统性能问题定位装置包括:处理器、存储器和总线,存储器存储有待调用的代理Agent程序,在所述Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数;存储器中还存储有执行指令,当装置运行时,处理器与存储器之间通过总线通信,处理器执行存储器中存储的如下执行指令:
在启动所述软件系统后,获取用户为所述Agent程序的监控参数配置的监控参数值;
若根据用户配置的监控参数值确定用户选择了启动监控,则调用所述Agent程序对所述软件系统执行的多个方法进行监控,得到监控结果;所述监控结果中包括方法执行时长;
输出所述监控结果,以便用户基于所述监控结果定位所述软件系统中存在性能问题的方法。
本申请实施例中,在软件系统的启动程序中指定了待调用的代理Agent程序,并且在所述Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数。在启动软件系统后,用户可以为Agent程序的监控参数动态配置监控参数值,比如将指示是否启动监控的参数的值配置为是,则此时调用Agent程序对软件系统执行的多个方法进行监控,得到包括方法执行时长在内的监控结果,用户就能够基于该监控结果对软件系统中存在性能问题的方法进行定位。这里,一方面,本申请通过Agent程序可以直接监控并输出软件系统中各个方法的执行时长,开发人员通过查看各个方法的执行时长,可以很快定位到存在性能问题的方法,相比在软件系统中记录大量的Debug日志,再由开发人员去分析这些Debug日志的方式,可以极大地提高开发人员的分析效率,而且,本申请方案只需要在软件系统的启动程序中指定Agent程序即可实现监控,无需修改软件系统的软件代码,极大地节省了开发成本。另一方面,本申请实施例中,各个监控参数的值可以动态配置,在软件系统启动后仍然可以对监控参数的值进行修改,开发人员可以根据自己的需要动态调整监控参数的值,而不需要重启软件系统,使得监控过程灵活便捷。
附图说明
为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要的附图做简单的介绍。显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种软件系统性能问题定位方法的流程图;
图2为本申请实施例所提供的一种软件系统性能问题定位装置的结构示意图;
图3为本申请另一实施例所提供的软件系统性能问题定位装置的结构示意图。
具体实施方式
本申请实施例在对软件系统性能问题进行定位时,会在软件系统的启动程序中指定待调用的Agent程序,在该Agent程序中设置有至少一种监控参数,用户(一般指开发人员)可以在软件系统启动后,根据自己的实际需要对各种监控参数的值进行配置(初始设置或者修改)。若用户将指示是否启动监控的参数的值配置为是,则通过调用所指定的Agent程序来对软件系统所执行的方法进行监控,得到包括方法执行时长在内的监控结果,从而能够使用户根据监控结果快速地定位软件系统中存在性能问题的方法。
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请做进一步详细的说明。
本申请所涉及的软件系统基于面向对象程序设计(Object-OrientedProgramming,OOP)实现,软件系统由多个类(Class)构成,每个类又由多个方法构成,方法定义在类的内部,用于实现类的各种功能。另外,本申请实施例所提供的软件系统性能问题定位方法既可以用于在软件系统上线后出现问题时,进行性能问题定位,还可以用于在软件系统的测试阶段进行性能分析,通过对测试版本的软件系统进行实时监控并分析,能够帮助开发人员随时修改设计、调整代码,降低正式版本的软件系统出现性能问题的可能。
本申请实施例中,如图1所示,为本申请一种实施例提供的软件系统性能问题定位方法流程图,本申请实施例中,负责执行Agent程序的主体可以为运行软件系统的Java虚拟机(Java Virtual Machine,JVM)。该方法包括以下步骤:
S101:在启动所述软件系统后,获取用户为所述Agent程序的监控参数配置的监控参数值。
这里,在启动软件系统后,用户可以通过点击界面按钮或者在搜索框中输入指定信息,发起监控页面调出指令,JVM在接收到该指令后,显示用于配置所述监控参数的监控页面,然后获取用户在该监控页面中配置的监控参数的值;监控参数中包括指示是否启动监控的参数;如果该参数的值指示不启动监控,则Agent程序不对方法的执行过程进行监控;如果该参数的值指示启动监控,则Agent程序对方法的执行过程进行监控。在实际应用中,当软件系统出现性能问题,需要进行性能问题定位时,用户只需要打开Agent程序的监控开关,也即将“指示是否启动监控的参数”的值设置为“是”,就能够实现对软件系统性能的监控。
在具体实现的时候,软件系统的启动程序中指定了待调用的代理(Agent)程序;Agent程序运行于软件系统的入口main方法之前,不会侵入软件系统的代码,完全独立于软件系统的其它类存在,只需要在软件系统的启动程序中指定相应的Agent Jar包即可。具体地,将编写好的Agent程序导出为一个Java归档(Java Archive,Jar)包,即Agent Jar包;将该Agent Jar包放到软件系统程序目录下,并在要监控的软件系统中,配置相关的启动参数,指向该Agent Jar包。例如,将Agent Jar包放到软件系统程序目录下的具体示例:-javaagent:D:\dev\e_workspace\my10-ws\Agent\dist\magent.jar
当软件系统启动的时候,会先执行该Agent Jar包所包含的代码,即先执行Agent程序。
需要说明的是,在上述步骤中,用户配置监控参数值可以是指用户首次配置,也可以是指用户对已有的监控参数值进行调整。比如,用户可以在软件系统启动之前,在将Agent程序写入软件系统时就将监控参数值设置好(设置为默认的初始值,或者根据实际需要设置),后续在软件系统启动后根据实际需求对监控参数值进行调整。用户也可以在将Agent程序写入软件系统时不设置监控参数的初始值,后续在软件系统启动后根据实际需求对监控参数值进行设置。
例如,当用户发现软件系统出现了性能问题时,如果此时软件系统中没有设置Agent程序,此时将Agent程序写入软件系统,并将指示是否启动监控的参数的值设置为是,然后重启软件系统,Agent程序就可以对软件系统中各个方法的执行进行监控。在用户定位问题的过程中,可以对监控参数值随时进行修改,比如当定位问题成功后,就可以将指示是否启动监控的参数的值调整为否。再例如,当用户发现软件系统出现了性能问题时,如果此时软件系统中已有Agent程序,此时只需要将指示是否启动监控的参数的值调整为是,就可以实现监控。
S102:若根据用户配置的所述监控参数值确定用户选择了启动监控,则调用所述Agent程序对所述软件系统执行的多个方法进行监控,得到监控结果;所述监控结果中包括方法执行时长。
在具体实现的时候,在调用Agent程序对软件系统执行的多个方法进行监控的时候,能够得到相应的监控结果。该监控结果中包括方法的执行时长。
具体地,Agent程序能够在方法开始执行的时候,记录该方法开始执行时间;并在方法结束执行的时候,记录方法结束执行时间;在生成某方法的执行时长的时候,将该方法对应的结束执行时间与开始执行时间进行相减。
为了实施监控,在编写Agent程序代码时,可以通过设置隔离语句指示在方法结束之前执行预设第一指令,在方法结束之后执行预设第二指令。比如,在每个方法结束之前执行记录进入方法的时间、是否监控、方法执行时长阈值、抽样率等指令;在方法结束之后执行计算方法的执行时长,根据方法执行时长输出相关监控结果的指令。由此,无需在各个方法的业务代码中均手工插入代码。
由于一个软件系统中的方法的数量是非常多的,而并不是所有的方法都存在性能问题,为了提高开发人员的效率,可以基于一定的条件对需要输出监控结果的方法进行筛选,获取其中可能存在性能问题的部分。具体地,在对方法进行筛选的时候,可以基于监控参数。除了上述指示是否启动监控的参数外,监控参数还包括如下几种:
1)方法执行时长阈值;
上述步骤中,调用所述Agent程序对所述软件系统执行的多个方法进行监控,包括:
针对所述软件系统执行的每个方法,在监控得到该方法的方法执行时长后,判断该方法执行时长是否超过所述执行时长阈值;若超过,则将该方法的标识信息及对应的方法执行时长作为监控结果记录下来。
在具体实现的时候,常见的导致系统性能出现问题的原因有:死循环或其他耗时逻辑,文件读写等频繁的输入/输出(Input/Output,I/O)操作,不当的锁保护导致的线程等待,频繁的申请较大的内存等,而这些原因都可能导致某一个方法执行的时间过长。因此,一般地,如果某个方法执行的时间过长,则认为该方法可能存在性能问题。因此在得到每个方法的方法执行时长后,将该方法对应的方法执行时长和预设的执行时长阈值进行比对;如果该方法对应的方法执行时长超过该执行时长阈值,那么就认为该方法可能存在性能问题,因此会将该方法的标识信息和对应的方法执行时长作为监控结果记录下来。具体地址,方法的标识信息可以包括:方法的名称、其所在的类的名称等,用于唯一标识该方法。
另外,在将方法的标识信息和对应的方法执行时长作为监控结果记录下来的时候,可以将方法的标识信息和对应的方法执行时长写入预先定义的监控队列中,在向用户输出监控结果的时候,可以直接将监控队列中的相关内容进行输出。
特殊地,由于方法执行中有可能存在死循环的情况,如果在输出监控结果的时刻,某些方法并未被执行完毕,而Agent程序只记录了这些并未执行完毕的方法对应的开始执行时间,而并未监控到其对应的结束执行时间,但是又不能排除这些未执行完毕的方法没有存在性能问题,因此,可以用当前时间减去开始执行时间的方式,得到这些并未被执行完毕的方法对应的执行时长;如果有哪个当前并未执行完毕的方法对应的执行时长大于某一个预设的时间阈值,则认为该方法可能存在性能问题,因此要将该方法的监控结果输出给用户进行具体分析。该预设的时间阈值大于上述执行时长阈值。
在具体执行的时候,Agent程序在方法执行开始的时候记录该方法的开始执行时间;同时,Agent程序为该方法分配唯一识别标识后,将该方法的唯一识别标识和开始执行时间写入预先定义的中间队列;在方法执行完毕的时候,记录方法的结束执行时间,同时将该方法的唯一识别标识和开始执行时间从中间队列中删除;在输出监控结果的时候,如果某方法的唯一识别标识和开始执行时间还被记录在中间队列中,则采用上述当前时间减去开始执行时间的方式,得到这些并未被执行完毕的方法对应的执行时长。
在具体实施中,可以将上述监控队列中方法执行时长超过所述执行时长阈值的方法对应的监控结果和所述中间队列中的方法对应的监控结果一起输出。
2)监控参数包括待分析方法数量m;m为大于1的正整数;
上述步骤中,调用所述Agent程序对所述软件系统执行的多个方法进行监控,包括:
将监控得到的多个方法的方法执行时长按照从大到小的顺序进行排列,选取前m个方法执行时长对应的方法;
所述输出所述监控结果,包括:
输出选取的前m个方法执行时长,及对应方法的标识信息。
在具体实现的时候,还可以将所监控的方法中,m个执行时长最大的方法作为待分析的方法。
以m等于10为例:
Agent程序会对软件系统执行的多个方法进行监控,获取监控到的每个方法对应的方法执行时长,然后按照监控得到的多个方法的方法执行时长从大到小的顺序进行排序,并取前10个方法监控时长对应的方法,然后向用户输出这10个方法的方法执行时长,和每个方法执行时长分别对应的标识信息。
需要注意的是,上述监控得到的多个方法,可以是软件系统所执行的所有方法,也可以是在上述1)中,所得到的方法执行时长大于执行时长阈值的方法。
如果上述监控得到的多个方法是上述1)中,所得到的方法执行时长大于执行时长阈值的方法,可以直接将写入预先定义的监控队列中的方法,按照方法执行时长从大到小的顺序进行排序,然后,获得排序前m个方法执行时长和对应的方法的标识信息,作为最终的监控结果。
3)监控参数包括抽样率;
上述步骤中,调用所述Agent程序对所述软件系统执行的多个方法进行监控,包括:
根据抽样率,调用Agent程序从软件系统执行的多个方法中随机选取方法进行监控。这里的抽样率可以指随机抽取方法的概率。
在具体实现的时候,在根据抽样率,调用Agent程序从所述软件系统执行的多个方法中随机选取方法进行监控的时候,以抽样率等于80%为例:
这里,抽样率为80%,意味着每个方法有80%的概率被抽取到,软件系统的方法总数越多,最终抽取到的方法数量比例越接近80%。一般情况下,软件系统的方法数量是非常庞大的,因此最终抽取到的方法数量比例与抽样率基本一致。
具体地,在进行抽样的时候,设置n个随机数(比如n为10的整数倍),在拦截到方法后,生成1~n范围内的一个随机数,如果该随机数属于1~0.8n,则对该方法进行监控,如果该随机数属于(0.8n+1)~n,则不对该方法进行监控。当要求随机性比较大时,可以设置n的取值大些。
在针对软件系统中所包含的所有方法按照抽样率进行采样之后,可以采用上述1)或者上述2)的方式,获得采样之后所得到的方法对应的监控结果。
另外,当软件系统出现性能问题时,采样率被设置为100%,以实现对软件系统的所有方法进行监控。而如果是日常对软件系统维护,可以根据实际的需求进行具体设定采样率的取值。
在具体实现的时候,软件系统会在接收到用户的监控页面调出指令后,向用户提供监控页面,在该监控页面中提供了供用户对监控参数进行设置或者修改的位置。用户可以通过该监控页面对Agent程序的监控参数进行动态修改:用户可以通过该监控页面,随时更改指示是否启动监控的参数、方法执行时长阈值、待分析方法数量m以及采样率。
除上述可以动态修改的监控参数外,还存在一种监控参数:待监控软件包的包名。在启动软件系统后,根据设置在Agent程序中的待监控软件包的包名,对所述待监控软件包中的多个方法中的每个方法进行监控。待监控软件包的包名可以是整个软件系统的包名,也可以是软件系统中一个功能模块的包名。该参数一般不能在软件系统启动后进行动态修改,需要在软件系统启动之前指定。当在软件系统运行过程中进行性能问题定位时,可以直接基于预先设置的软件系统的包名进行性能问题定位;当需要对软件系统或软件系统中的某个功能模块进行性能监控时,可以在软件系统启动前,根据需要设置或修改待监控软件包的包名。
基于上述描述可知,本申请实施例可以对整个软件系统或软件系统中的某个完整的功能模块进行监控,软件系统或软件系统中的每个功能模块一般包含有多个方法,通过指定待监控软件包的包名,可以实现在软件系统启动后对多个方法的顺序监控,极大地提高了监控效率及性能问题定位的效率。
S103:输出所述监控结果,以便用户基于所述监控结果定位所述软件系统中存在性能问题的方法。
在具体实现的时候,监控结果可以采用多种方式进行输出,例如,软件系统向用户提供相应的监控页面上,该监控页面可以向用户显示最终的监控结果;另外,除了上述方式以外,还可以采用日志的方法输出监控结果。
当用户获得监控结果后,就可以基于该监控结果对软件系统中存在性能问题的方法进行定位。
本申请实施例所提供的软件系统性能问题定位方法,通过Agent程序可以直接监控并输出软件系统中各个方法的执行时长,开发人员通过查看各个方法的执行时长,可以很快定位到存在性能问题的方法,相比在软件系统中记录大量的Debug日志,再由开发人员去分析这些Debug日志的方式,可以极大地提高开发人员的分析效率,而且,本申请方案只需要在软件系统的启动程序中指定Agent程序即可实现监控,无需修改软件系统的软件代码,极大地节省了开发成本。另外,本申请实施例中,各个监控参数的值可以动态配置,在软件系统启动后仍然可以对监控参数的值进行修改,开发人员可以根据自己的需要动态调整监控参数的值,而不需要重启软件系统,使得监控过程灵活便捷。
下面,提供一个对软件系统的性能问题进行定位的示例:
1)将编写好的Agent程序导出为一个Agent Jar包,并命名为magent.jar,将该Agent Jar包放到软件系统程序目录下。在需要监控的软件系统代码的启动参数中,配置相应的启动参数,指向上面的Agent Jar包:
-javaagent:D:\dev\e_workspace\my10-ws\Agent\dist\magent.jar
2)启动软件系统,默认情况下,监控并未开启,即指示是否启动监控的参数的值为否(false)。当软件系统出现性能问题,或者开发人员想要进行性能监控时,根据需要配置监控参数值,开启监控,比如将指示是否启动监控的参数的值调整为是(true)。也即,根据用户的监控页面调出指令调出监控页面,并利用Java管理扩展(Java ManagementExtensions,JMX)实现对参数的界面提供及动态修改,用户可根据需要配置监控参数值。
3)待软件系统运行一段时间后,可通过监控页面查看执行时间最长的方法TOP10,JMX界面对对应的方法进行展示,按照方法执行时长从长到短依次排列,并列出方法的名称(标识信息)以及该方法对应的方法执行时长。
4)若除去TOP10的方法还想查看剩余方法对应的方法执行时长,也可根据需要输出。JVM可以通过日志文件对剩余方法的监控结果进行输出,也可根据需要采用其他输出方式。
对于监控结果中方法执行时长较长的方法,很有可能就是影响软件系统性能的方法,开发人员可针对这些方法进行重点分析,或定位软件系统的性能问题,或对软件系统进行系统的优化等。
5)待完成性能问题定位,并解决了问题后,可以通过监控页面将指示是否启动监控的参数的值调整为否(false)。
基于同一发明构思,本申请实施例中还提供了与软件系统性能问题定位方法对应的软件系统性能问题定位装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述软件系统性能问题定位方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参见图2所示,本申请实施例所提供的软件系统性能问题定位装置,在该装置中:所述软件系统的启动程序中指定了待调用的代理Agent程序,在所述Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数;该装置包括:
获取模块21,用于在启动所述软件系统后,获取用户为所述Agent程序的监控参数配置的监控参数值;
监控模块22,用于在根据用户配置的监控参数值确定用户选择了启动监控时,调用所述Agent程序对所述软件系统执行的多个方法进行监控,得到监控结果;所述监控结果中包括方法执行时长;
输出模块23,用于输出所述监控结果,以便用户基于所述监控结果定位所述软件系统中存在性能问题的方法。
可选地,所述述监控参数中还包括方法执行时长阈值;
所述监控模块22具体用于:针对所述软件系统执行的每个方法,在监控得到该方法的方法执行时长后,判断该方法执行时长是否超过所述执行时长阈值;若超过,则将该方法的标识信息及对应的方法执行时长作为监控结果记录下来。
可选地,所述监控参数中还包括待分析方法数量m;m为大于1的正整数;
所述监控模块22具体用于:将监控得到的多个方法的方法执行时长按照从大到小的顺序进行排列,选取前m个方法执行时长;
所述输出模块23具体用于:输出选取的所述前m个方法执行时长,及对应方法的标识信息。
可选地,所述监控参数中还包括抽样率;
所述监控模块22具体用于:根据所述抽样率,调用所述Agent程序从所述软件系统执行的多个方法中随机选取方法进行监控。
可选地,所述获取模块21具体用于:在接收到用户的监控页面调出指令后,显示用于配置所述监控参数值的监控页面;
获取用户在所述监控页面中配置的监控参数值。
可选地,所述监控模块22具体用于:在启动所述软件系统后,根据设置在Agent程序中的待监控软件包的包名,对所述待监控软件包中的多个方法中的每个方法进行监控。
本申请实施例所提供的软件系统性能问题定位装置,在软件系统的启动程序中指定了待调用的代理Agent程序,并且在所述Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数。在启动软件系统后,用户可以为Agent程序的监控参数动态配置监控参数值,比如将指示是否启动监控的参数的值配置为是,则此时调用Agent程序对软件系统执行的多个方法进行监控,得到包括方法执行时长在内的监控结果,用户就能够基于该监控结果对软件系统中存在性能问题的方法进行定位。这里,一方面,本申请通过Agent程序可以直接监控并输出软件系统中各个方法的执行时长,开发人员通过查看各个方法的执行时长,可以很快定位到存在性能问题的方法,相比在软件系统中记录大量的Debug日志,再由开发人员去分析这些Debug日志的方式,可以极大地提高开发人员的分析效率,而且,本申请方案只需要在软件系统的启动程序中指定Agent程序即可实现监控,无需修改软件系统的软件代码,极大地节省了开发成本。另一方面,本申请实施例中,各个监控参数的值可以动态配置,在软件系统启动后仍然可以对监控参数的值进行修改,开发人员可以根据自己的需要动态调整监控参数的值,而不需要重启软件系统,使得监控过程灵活便捷。
如图3所示,为本申请另一实施例所提供的软件系统性能问题定位装置示意图,该软件系统性能问题定位装置30包括:处理器31、存储器32和总线33,存储器32存储有待调用的代理Agent程序,在所述Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数;存储器32中还存储有执行指令,当装置运行时,处理器31与存储器32之间通过总线33通信,处理器31执行存储器32中存储的如下执行指令:
在启动所述软件系统后,获取用户为所述Agent程序的监控参数配置的监控参数值;
若根据用户配置的监控参数值确定用户选择了启动监控,则调用所述Agent程序对所述软件系统执行的多个方法进行监控,得到监控结果;所述监控结果中包括方法执行时长;
输出所述监控结果,以便用户基于所述监控结果定位所述软件系统中存在性能问题的方法。
可选地,所述监控参数中还包括方法执行时长阈值;
处理器31具体用于根据以下步骤调用所述Agent程序对所述软件系统执行的多个方法进行监控:
针对所述软件系统执行的每个方法,在监控得到该方法的方法执行时长后,判断该方法执行时长是否超过所述执行时长阈值;若超过,则将该方法的标识信息及对应的方法执行时长作为监控结果记录下来。
可选地,监控参数中还包括待分析方法数量m;m为大于1的正整数;
处理器31具体用于根据以下步骤调用所述Agent程序对所述软件系统执行的多个方法进行监控:
将监控得到的多个方法的方法执行时长按照从大到小的顺序进行排列,选取前m个方法执行时长;
处理器31具体用于根据以下步骤输出所述监控结果:
输出选取的所述前m个方法执行时长,及对应方法的标识信息。
可选地,监控参数中还包括抽样率;
处理器31具体用于根据以下步骤调用所述Agent程序对所述软件系统执行的多个方法进行监控:根据所述抽样率,调用所述Agent程序从所述软件系统执行的多个方法中随机选取方法进行监控。
可选地,处理器31具体用于:在接收到用户的监控页面调出指令后,显示用于配置所述监控参数值的监控页面;获取用户在所述监控页面中配置的监控参数值。
可选地,处理器31具体用于根据以下步骤调用所述Agent程序对所述软件系统执行的多个方法进行监控:
在启动所述软件系统后,根据设置在Agent程序中的待监控软件包的包名,对所述待监控软件包中的多个方法中的每个方法进行监控。
本申请实施例所提供的软件系统性能问题定位方法以及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (9)
1.一种软件系统性能问题定位方法,其特征在于,所述软件系统的启动程序中指定了待调用的代理Agent程序,在所述Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数;该方法包括:
在启动所述软件系统后,获取用户为所述Agent程序的监控参数配置的监控参数值;
若根据用户配置的监控参数值确定用户选择了启动监控,则调用所述Agent程序对所述软件系统执行的多个方法进行监控,得到监控结果;所述监控结果中包括方法执行时长;其中,用户选择启动监控的情况为软件系统出现性能问题或是对软件系统进行测试过程中;
输出所述监控结果,以便用户基于所述监控结果定位所述软件系统中存在性能问题的方法;
所述监控参数中还包括抽样率;
所述调用所述Agent程序对所述软件系统执行的多个方法进行监控,包括:
根据所述抽样率,调用所述Agent程序从所述软件系统执行的多个方法中随机选取方法进行监控;其中,所述抽样率是基于用户选择启动监控的情况确定的,当用户选择启动监控的情况为软件系统出现性能问题时,所述抽样率设置为最大值;当用户选择启动监控的情况是对软件系统进行测试过程中,根据需求设置所述抽样率的值。
2.如权利要求1所述的方法,其特征在于,所述监控参数中还包括方法执行时长阈值;
所述调用所述Agent程序对所述软件系统执行的多个方法进行监控,包括:
针对所述软件系统执行的每个方法,在监控得到该方法的方法执行时长后,判断该方法执行时长是否超过所述执行时长阈值;若超过,则将该方法的标识信息及对应的方法执行时长作为监控结果记录下来。
3.如权利要求1或2所述的方法,其特征在于,所述监控参数中还包括待分析方法数量m;m为大于1的正整数;
所述调用所述Agent程序对所述软件系统执行的多个方法进行监控,包括:
将监控得到的多个方法的方法执行时长按照从大到小的顺序进行排列,选取前m个方法执行时长;
所述输出所述监控结果,包括:
输出选取的所述前m个方法执行时长,及对应方法的标识信息。
4.如权利要求1所述的方法,其特征在于,所述获取用户为所述Agent程序的监控参数配置的监控参数值,包括:
在接收到用户的监控页面调出指令后,显示用于配置所述监控参数值的监控页面;
获取用户在所述监控页面中配置的监控参数值。
5.如权利要求1所述的方法,其特征在于,调用所述Agent程序对所述软件系统执行的多个方法进行监控,包括:
在启动所述软件系统后,根据设置在Agent程序中的待监控软件包的包名,对所述待监控软件包中的多个方法中的每个方法进行监控。
6.一种软件系统性能问题定位装置,其特征在于,所述软件系统的启动程序中指定了待调用的代理Agent程序,在所述Agent程序中设置有至少一种监控参数,其中包括指示是否启动监控的参数;该装置包括:
获取模块,用于在启动所述软件系统后,获取用户为所述Agent程序的监控参数配置的监控参数值;
监控模块,用于在根据用户配置的监控参数值确定用户选择了启动监控时,调用所述Agent程序对所述软件系统执行的多个方法进行监控,得到监控结果;所述监控结果中包括方法执行时长;其中,用户选择启动监控的情况为软件系统出现性能问题或是对软件系统进行测试过程中;
输出模块,用于输出所述监控结果,以便用户基于所述监控结果定位所述软件系统中存在性能问题的方法;
所述监控参数中还包括抽样率;
所述监控模块具体用于:根据所述抽样率,调用所述Agent程序从所述软件系统执行的多个方法中随机选取方法进行监控;其中,所述抽样率是基于用户选择启动监控的情况确定的,当用户选择启动监控的情况为软件系统出现性能问题时,所述抽样率设置为最大值;当用户选择启动监控的情况是对软件系统进行测试过程中,根据需求设置所述抽样率的值。
7.根据权利要求6所述的装置,其特征在于,所述监控参数中还包括方法执行时长阈值;
所述监控模块具体用于:针对所述软件系统执行的每个方法,在监控得到该方法的方法执行时长后,判断该方法执行时长是否超过所述执行时长阈值;若超过,则将该方法的标识信息及对应的方法执行时长作为监控结果记录下来。
8.根据权利要求6或7所述的装置,其特征在于,所述监控参数中还包括待分析方法数量m;m为大于1的正整数;
所述监控模块具体用于:将监控得到的多个方法的方法执行时长按照从大到小的顺序进行排列,选取前m个方法执行时长;
所述输出模块具体用于:输出选取的所述前m个方法执行时长,及对应方法的标识信息。
9.根据权利要求6所述的装置,其特征在于,所述获取模块,具体用于:在接收到用户的监控页面调出指令后,显示用于配置所述监控参数值的监控页面;
获取用户在所述监控页面中配置的监控参数值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710898521.7A CN107656849B (zh) | 2017-09-28 | 2017-09-28 | 一种软件系统性能问题定位方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710898521.7A CN107656849B (zh) | 2017-09-28 | 2017-09-28 | 一种软件系统性能问题定位方法以及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107656849A CN107656849A (zh) | 2018-02-02 |
CN107656849B true CN107656849B (zh) | 2021-12-07 |
Family
ID=61116802
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710898521.7A Active CN107656849B (zh) | 2017-09-28 | 2017-09-28 | 一种软件系统性能问题定位方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107656849B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110727865A (zh) * | 2019-10-09 | 2020-01-24 | 北京百度网讯科技有限公司 | 检索策略的问题定位方法、装置、电子设备及存储介质 |
CN111984341B (zh) * | 2020-08-31 | 2021-06-22 | 卫宁健康科技集团股份有限公司 | 项目监测方法、装置、电子设备和存储介质 |
CN113282469A (zh) * | 2021-04-30 | 2021-08-20 | 完美世界控股集团有限公司 | 应用程序的性能检测方法、系统、存储介质及计算设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722680A (zh) * | 2004-12-30 | 2006-01-18 | 杭州华为三康技术有限公司 | 用户终端的代理服务检测方法 |
CN102122263A (zh) * | 2011-03-23 | 2011-07-13 | 成都勤智数码科技有限公司 | 一种java应用系统运行时监控方法和装置 |
CN102412989A (zh) * | 2011-11-16 | 2012-04-11 | 山东浪潮齐鲁软件产业股份有限公司 | 一种j2ee应用获取unix主机性能数据的方法 |
CN106294168A (zh) * | 2016-08-16 | 2017-01-04 | 广州华多网络科技有限公司 | 一种进行应用程序测试的方法和系统 |
CN106776302A (zh) * | 2016-12-01 | 2017-05-31 | 郑州云海信息技术有限公司 | 计算java项目中方法执行时间的方法、装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0107921D0 (en) * | 2001-03-30 | 2001-05-23 | Ibm | Computer system with multiple heaps and heap reset facility |
-
2017
- 2017-09-28 CN CN201710898521.7A patent/CN107656849B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722680A (zh) * | 2004-12-30 | 2006-01-18 | 杭州华为三康技术有限公司 | 用户终端的代理服务检测方法 |
CN102122263A (zh) * | 2011-03-23 | 2011-07-13 | 成都勤智数码科技有限公司 | 一种java应用系统运行时监控方法和装置 |
CN102412989A (zh) * | 2011-11-16 | 2012-04-11 | 山东浪潮齐鲁软件产业股份有限公司 | 一种j2ee应用获取unix主机性能数据的方法 |
CN106294168A (zh) * | 2016-08-16 | 2017-01-04 | 广州华多网络科技有限公司 | 一种进行应用程序测试的方法和系统 |
CN106776302A (zh) * | 2016-12-01 | 2017-05-31 | 郑州云海信息技术有限公司 | 计算java项目中方法执行时间的方法、装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107656849A (zh) | 2018-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109302522B (zh) | 测试方法、装置以及计算机系统和介质 | |
CN108399132B (zh) | 一种调度测试方法、装置及存储介质 | |
CN106844136B (zh) | 一种程序崩溃信息的收集方法及系统 | |
CN111400186B (zh) | 性能测试方法及系统 | |
CN108197032B (zh) | Ios应用的主线程卡顿监测方法、介质、设备及系统 | |
CN107656849B (zh) | 一种软件系统性能问题定位方法以及装置 | |
CN110750458A (zh) | 大数据平台测试方法、装置、可读存储介质及电子设备 | |
CN112148610A (zh) | 测试用例执行方法、装置、计算机设备和存储介质 | |
CN110928777B (zh) | 测试用例的处理方法、装置、设备及存储介质 | |
CN112269697B (zh) | 一种设备存储性能测试方法、系统及相关装置 | |
CN104410671A (zh) | 一种快照抓取方法和数据监控工具 | |
CN112181749A (zh) | 硬件测试方法、装置、电子设备和存储介质 | |
CN109063040B (zh) | 客户端程序数据采集方法及系统 | |
CN112558982B (zh) | 代码检测方法、装置及计算机设备 | |
CN112346981A (zh) | 联调测试覆盖率检测方法及系统 | |
CN112257065A (zh) | 一种进程事件处理方法和装置 | |
CN112084108A (zh) | 一种测试脚本生成方法、装置及相关组件 | |
CN116860555A (zh) | 软件运行监控方法、装置、设备以及计算机存储介质 | |
CN113238901B (zh) | 多设备的自动化测试方法及装置、存储介质、计算机设备 | |
US20150261646A1 (en) | Selective profiling of applications | |
CN115617668A (zh) | 一种兼容性测试方法、装置及设备 | |
CN114020580A (zh) | 监测应用系统的性能指标的方法、系统、设备和存储介质 | |
CN112948202A (zh) | 应用程序监控方法、装置、设备及可读存储介质 | |
CN111767123A (zh) | 运行优化方法及装置 | |
CN116414610B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |