CN111367768A - 程序的函数响应时间监控方法及装置 - Google Patents

程序的函数响应时间监控方法及装置 Download PDF

Info

Publication number
CN111367768A
CN111367768A CN202010236195.5A CN202010236195A CN111367768A CN 111367768 A CN111367768 A CN 111367768A CN 202010236195 A CN202010236195 A CN 202010236195A CN 111367768 A CN111367768 A CN 111367768A
Authority
CN
China
Prior art keywords
function
response time
monitored
file
type
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
Application number
CN202010236195.5A
Other languages
English (en)
Inventor
夏伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CCB Finetech Co Ltd
Original Assignee
China Construction Bank Corp
CCB Finetech Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Construction Bank Corp, CCB Finetech Co Ltd filed Critical China Construction Bank Corp
Priority to CN202010236195.5A priority Critical patent/CN111367768A/zh
Publication of CN111367768A publication Critical patent/CN111367768A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供的一种程序的函数响应时间监控方法及装置,通过获取待监控函数对应的第一类文件;然后在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。本发明的方案对系统的侵入和影响更小,同时更具扩展性和维护性,在不修改源代码的情况,在线地配置被监控函数,实时获取和展示函数响应时间的趋势。测试人员在测试执行过程中可以观察函数响应时间趋势,调整被监控函数,定位出响应时间慢的函数,提升测试效率。

Description

程序的函数响应时间监控方法及装置
技术领域
本发明涉及程序的函数响应时间监控技术领域,更具体的,涉及一种程序的函数响应时间监控方法及装置。
背景技术
商业银行IT系统响应的及时性极其重要,用户对应用程序的响应时间非常敏感,评价IT系统质量的一个关键指标就是响应时间。通常情况下,开发人员会在程序中打印部分关键逻辑的响应时间日志,但在测试过程中遇到响应时间长的问题时,仅依靠原有的日志无法详细定位存在问题的函数,如果再要求开发人员编写代码,根据情况打印相关函数的响应时间日志,需要编写代码,重新编译、部署和测试,人工成本较高,效率较低。
发明内容
为了解决上述问题中的至少一个,本发明实施例提供一种程序的函数响应时间监控方法,包括:
获取待监控函数对应的第一类文件;
在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;
将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。
在某些实施例中,所述对所述第一类文件进行字节码编辑,包括:
通过ASM框架对所述第一类文件进行字节码编辑。
在某些实施例中,所述通过ASM框架对所述第一类文件进行字节码编辑,包括:
编写premain入口;
通过java-javaagent:agent.jar TestAgent启动所述程序的JVM进程。
在某些实施例中,所述通过ASM框架对所述第一类文件进行字节码编辑,包括:
编写agentmain入口;
通过Attach API侵入待监控函数的JVM进程,并将代理函数附着在待监控函数的JVM进程,所述代理函数包括获取函数的响应时间逻辑。
在某些实施例中,还包括:
展示所述待监控函数的平均响应时间、函数调用次数以及前90%响应时间中的至少一个。
本发明实施例还提供一种程序的函数响应时间监控装置,包括:
第一类文件获取模块,获取待监控函数对应的第一类文件;
第二类文件生成模块,在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;
响应时间采集模块,将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。
在某些实施例中,所述第二类文件生成模块通过ASM框架对所述第一类文件进行字节码编辑。
在某些实施例中,所述第二类文件生成模块包括:
入口编写单元,编写premain入口;
程序启动模块,通过java-javaagent:agent.jar TestAgent启动待监控函数的JVM进程。
在某些实施例中,所述第二类文件生成模块包括:
入口编写单元,编写agentmain入口;
代理函数附着单元,通过Attach API侵入待监控函数的JVM进程,并将代理函数附着在待监控函数的JVM进程,所述代理函数包括获取函数的响应时间逻辑。
在某些实施例中,还包括:
展示模块,展示所述待监控函数的平均响应时间、函数调用次数以及前90%响应时间中的至少一个。
本发明还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述的方法的步骤。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上所述的方法的步骤。
本发明具有如下有益效果:
本发明提供的一种程序的函数响应时间监控方法及装置,通过获取待监控函数对应的第一类文件;然后在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。本发明的方案对系统的侵入和影响更小,同时更具扩展性和维护性,在不修改源代码的情况,在线地配置被监控函数,实时获取和展示函数响应时间的趋势。测试人员在测试执行过程中可以观察函数响应时间趋势,调整被监控函数,定位出响应时间慢的函数,提升测试效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明提供的一种程序的函数响应时间监控方法流程示意图。
图2示出了本发明中函数TPS(每秒调用次数)趋势示意图。
图3示出了本发明中函数平均响应时间趋势示意图。
图4示出了本发明中函数90%响应时间趋势示意图。
图5示出了本发明中实现程序的函数响应时间监控方法的场景架构示意图。
图6示出了本发明提供的一种程序的函数响应时间监控装置的结构示意图。
图7示出适于用来实现本发明实施例的计算机设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
常开发人员需要获取函数响应时间时,会在函数调用开始前打印日志记录当前时间戳,“long start=System.currentTimeMillis();”,函数结束后打印日志,“log.info("function cost:"+(System.currentTimeMillis()-start));”,然后对日志进行统计分析。
这种方式的缺点是:
1、这种方式输出内容比较单一,输出内容为代码总体运行时间。但是在性能调优过程中需要查看更多的性能指标,比如总的平均值,前90%响应时间,TPS(每秒调用次数)等。
2、代码在线上运行,希望把这些值通过图表的形式展示出来。
此外,对于功能更加丰富的监控框架Perf4J,Perf4J是一款开源工具包,用于添加Java服务器端计时代码、记录日志和监控结果。Perf4J提供了@Profiled注解,可以添加在需要记录执行时间的方法上:
Figure BDA0002431052040000041
Perf4J可以与日志框架集成,将函数响应时间写在日志中,然后通过日志分析工具,以图表的形式展示出来。
但是Perf4J响应时间监控方法需要在代码编写过程中对被监控函数添加注解,并做相关日志打印的配置,如果生产测试过程中,添加或者修改被监控函数,需要重新进行代码编写、配置修改、编译、部署等环节,很不方便,影响工作效率,对于函数响应时间的实时监控存在诸多不足。
本发明旨在如何在不改变程序代码的前提下,对函数响应时间进行实时监控,其主体构思是通过获取待监控函数对应的第一类文件;然后在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。
可以理解,本发明中的实时执行某个操作,即为以设定频率反复执行该操作,本领域技术人员公知,目前没有绝对实时的概念,本领域技术人员针对实时的解释,应当是在每个时间帧时执行操作,例如将时间1s划分为60帧,即以设定频率60Hz来执行操作,每一时间帧采集一次时间日志,这样即为本领域所公知的“实时”。
本发明的采用的工具平台的主要原理是通过JAVA自带的Attach API在应用启动后实现将agent注入应用进程JVM;通过Instrumentation修改JAVA应用的class文件;通过ASM技术编写agent程序修改class文件中的字节码,注入响应时间监控代码并打印日志;通过采集代理将响应时间日志推送至时序数据库,最后在页面中展示响应时间的趋势图。
下面结合附图对本发明的发明构思进行详细说明。
图1示出了本发明实施例中一种程序的函数响应时间监控方法,包括:
S1:获取待监控函数对应的第一类文件。
具体的,首先通过配置控制台来进行监控配置、采集代理推送、启动采集代理、关闭采集代理、跳转监控结果UI界面等功能。监控配置中,用户填写被监控服务器的IP、用户名密码等信息,便于配置控制台连接服务器。用户填写被监控的JAVA进程号或者应用名、被监控函数列表,采集代理通过进程号或应用名找出被监控进程。
S2:在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑。
具体的,启动采集代理即将采集代理程序、监控代理jar包和被监控函数配置列表推送至被监控服务器,调起采集代理,对JAVA进程进行字节码增强,修改应用的字节码,注入函数监控代码。关闭采集代理即恢复JAVA进程字节码,停止函数响应时间监控,并关闭采集代理进程。
采集代理是一个agent代理程序,主要包括对JAVA应用进行注入和采集响应时间日志功能。代理程序根据进程号或应用名找到被监控JAVA进程,通过Attach API将监控jar包侵入应用JVM进程。代理程序以5s采集频率从约定的日志目录读取日志信息,并传递给时序数据库。
监控代理侵入应用JVM进程后,识别需监控的函数,修改字节码文件,添加获取响应时间逻辑,并输出响应时间到日志系统。
一些实施例中,通过ASM框架对所述第一类文件进行字节码编辑。
如图5所示,图5示出了具体的应用场景架构,其具体过程包括:
筛选出需要增强的类(待监控函数对应的第一类文件);具体的,根据className进行条件过滤,将配置文件中需要增强的类筛选出。
通过Instrumentation.retransformClasses重新加载类,重新加载时会触发ClassFileTransformer.transform方法,对指定的类进行字节码编辑,得到第二类文件。
实现ClassVisitor接口,主要是visit和visitMethod方法,其中visitMethod是对类中每个方法的访问。visitMethod可以根据函数名称进行对函数名的过滤,即实现只针对配置文件中需被监控的函数进行字节码增强。
实现AdviceAdapter接口,在onMethodEnter中加入被监控函数执行前的逻辑,“long start=System.nanoTime();”,在onMethodExit中加入被监控函数执行后的处理逻辑,“profiling(start,methodId);”。
Instrumentation是Java5提供的新特性。使用Instrumentation,可以获取JVM运行时状态,替换和修改类定义。开发者可以构建一个代理,用来监测运行在JVM上的程序。具体类定义中字节码的修改可由ASM完成。ASM是一个java字节码操纵框架,它能被用来动态生成类或增强既有类的功能。ASM可以直接产生二进制class文件,也可以在类被加载入Java虚拟机之前动态改变类行为。ASM字节码增强技术主要是用来反射的时候提升性能的,如果单纯用JDK的反射调用,性能是非常低下的,而使用字节码增强技术后反射调用的时间已经基本可以与直接调用相当。在ASM中提供了诸多的API用于对类的内容进行字节码操作的方法,如插入一条日志打印代码。Instrumentation有两种方式附加到应用JVM进程,一种是编写premain入口,通过java-javaagent:agent.jar TestAgent启动应用,这种方式不能在应用启动后进行动态跟踪;一种是编写agentmain入口,通过Attach API侵入应用JVM进程,这种方式可以在应用启动后动态跟踪。Attach API是JAVA6的新特性,用来向目标JVM“附着”(Attach)代理工具程序的。通过Attach API,开发者可以方便的监控一个JVM,运行一个外加的代理程序。
methodId是被监控函数的唯一标识,通过该标识可以对函数每次的调用时间联系起来。为了节约内存消耗,定义一个short型数组costArr[512],以数组下标为响应时间(ms),对应值为出现的次数,超过500ms的响应时间则存储在map中,key为响应时间(ms),value为key值响应时间出现的次数。为了不影响应用正常的性能,降低监控带来的开销,以一秒为间隔打印日志。在一秒内统计所有的值,这些值相加就是函数调用次数,即为TPS。根据数组下标、下标对应值,map的key、value值可以得出平均响应时间,前90%响应时间的下标或key值,还可以算出99%响应时间等值。打印日志时,将当前时间戳、服务器名、类名、函数名、count(函数调用次数)、avg(平均响应时间ms)、TP90(90%响应时间ms)作为一条记录打印。
S3:将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。
例如,代理程序以5s为间隔,采集监控响应时间日志,调用时序数据库的http API将日志推送至时序数据库。
在一些实施例中,可以通过界面展示,在web界面中展示响应时间的趋势,如TPS(图2)、平均响应时间(图3)、90%响应时间(图4)等。可以根据服务器、类、函数名筛选需展示的响应时间趋势。
本发明可以快捷地配置所需监控的函数,实时展示特定函数的响应时间,可以快速定位应用响应慢的原因,极大地提高性能测试效率。由于采用ASM,异步打印日志等技术,对应用程序性能影响很小,可以忽略不计。把响应时间日志存储在时序数据库中,也可以比对不同测试场景下的响应时间变化情况,供开发测试容易分析。
如图2至图4,本装置可以展示函数TPS,函数平均响应时间、90%响应时间的趋势中的至少一个。
可以理解,在JAVA应用性能测试过程中,当遇到交易响应时间问题时,定位具体慢的函数很困难,打印函数响应时间的日志需要编写代码、重新编译、部署和压力测试。由于交易逻辑复杂,函数调用栈长,如果太多函数打印响应时间日志则对应用本身会有较大的性能影响,如果逐步打印调用栈的函数响应时间日志,则耗费太多的人力、物力。
本发明通过获取待监控函数对应的第一类文件;然后在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。本发明的方案对系统的侵入和影响更小,同时更具扩展性和维护性,在不修改源代码的情况,在线地配置被监控函数,实时获取和展示函数响应时间的趋势。测试人员在测试执行过程中可以观察函数响应时间趋势,调整被监控函数,定位出响应时间慢的函数,提升测试效率。可以在线地设置需要监控的函数,实时地获取被监控函数的响应时间。可以在性能测试过程中,发现重点函数响应时间的变化趋势。在定位程序响应时间慢的过程中,可以实时变更被监控的函数,获取函数响应时间,快速地定位程序响应时间慢的问题。
基于相同的发明构思,本发明实施例还提供一种程序的函数响应时间监控装置,如图6所示,包括:
第一类文件获取模块1,获取待监控函数对应的第一类文件;
第二类文件生成模块2,在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;
响应时间采集模块3,将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。
在某些实施例中,所述第二类文件生成模块通过ASM框架对所述第一类文件进行字节码编辑。
在某些实施例中,所述第二类文件生成模块包括:
入口编写单元,编写premain入口;
程序启动模块,通过java-javaagent:agent.jar TestAgent启动待监控函数的JVM进程。
在某些实施例中,所述第二类文件生成模块包括:
入口编写单元,编写agentmain入口;
代理函数附着单元,通过Attach API侵入待监控函数的JVM进程,并将代理函数附着在待监控函数的JVM进程,所述代理函数包括获取函数的响应时间逻辑。
在某些实施例中,还包括:
展示模块,展示所述待监控函数的平均响应时间、函数调用次数以及前90%响应时间中的至少一个。
可以理解,本发明提供的一种程序的函数响应时间监控装置,通过获取待监控函数对应的第一类文件;然后在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。本发明的方案对系统的侵入和影响更小,同时更具扩展性和维护性,在不修改源代码的情况,在线地配置被监控函数,实时获取和展示函数响应时间的趋势。测试人员在测试执行过程中可以观察函数响应时间趋势,调整被监控函数,定位出响应时间慢的函数,提升测试效率。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机设备,具体的,计算机设备例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
在一个典型的实例中计算机设备具体包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述的由客户端执行的方法,或者,所述处理器执行所述程序时实现如上所述的由服务器执行的方法。
下面参考图7,其示出了适于用来实现本发明实施例的计算机设备600的结构示意图。
如图7所示,计算机设备包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM))603中的程序而执行各种适当的工作和处理。在RAM603中,还存储有系统操作所需的各种程序和数据。CPU601、ROM602、以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡,调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装如存储部分608。
特别地,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包括用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本发明的实施例可提供为方法、系统或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。

Claims (12)

1.一种程序的函数响应时间监控方法,其特征在于,包括:
获取待监控函数对应的第一类文件;
在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;
将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。
2.根据权利要求1所述的函数响应时间监控方法,其特征在于,所述对所述第一类文件进行字节码编辑,包括:
通过ASM框架对所述第一类文件进行字节码编辑。
3.根据权利要求2所述的函数响应时间监控方法,其特征在于,所述通过ASM框架对所述第一类文件进行字节码编辑,包括:
编写premain入口;
通过java-javaagent:agent.jar TestAgent启动所述程序的JVM进程。
4.根据权利要求2所述的函数响应时间监控方法,其特征在于,所述通过ASM框架对所述第一类文件进行字节码编辑,包括:
编写agentmain入口;
通过Attach API侵入待监控函数的JVM进程,并将代理函数附着在待监控函数的JVM进程,所述代理函数包括获取函数的响应时间逻辑。
5.根据权利要求1所述的函数响应时间监控方法,其特征在于,还包括:
展示所述待监控函数的平均响应时间、函数调用次数以及前90%响应时间中的至少一个。
6.一种程序的函数响应时间监控装置,其特征在于,包括:
第一类文件获取模块,获取待监控函数对应的第一类文件;
第二类文件生成模块,在所述第一类文件被加载至虚拟机之前,对所述第一类文件进行字节码编辑,生成第二类文件,所述第二类文件包括获取函数的响应时间逻辑;
响应时间采集模块,将所述第二类文件加载至所述虚拟机,进而以设定频率采集所述待监控函数的响应时间。
7.根据权利要求6所述的函数响应时间监控装置,其特征在于,所述第二类文件生成模块通过ASM框架对所述第一类文件进行字节码编辑。
8.根据权利要求7所述的函数响应时间监控装置,其特征在于,所述第二类文件生成模块包括:
入口编写单元,编写premain入口;
程序启动模块,通过java-javaagent:agent.jar TestAgent启动待监控函数的JVM进程。
9.根据权利要求7所述的函数响应时间监控装置,其特征在于,所述第二类文件生成模块包括:
入口编写单元,编写agentmain入口;
代理函数附着单元,通过Attach API侵入待监控函数的JVM进程,并将代理函数附着在待监控函数的JVM进程,所述代理函数包括获取函数的响应时间逻辑。
10.根据权利要求6所述的函数响应时间监控装置,其特征在于,还包括:
展示模块,展示所述待监控函数的平均响应时间、函数调用次数以及前90%响应时间中的至少一个。
11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至5任一项所述的方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至5任一项所述的方法。
CN202010236195.5A 2020-03-30 2020-03-30 程序的函数响应时间监控方法及装置 Pending CN111367768A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010236195.5A CN111367768A (zh) 2020-03-30 2020-03-30 程序的函数响应时间监控方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010236195.5A CN111367768A (zh) 2020-03-30 2020-03-30 程序的函数响应时间监控方法及装置

Publications (1)

Publication Number Publication Date
CN111367768A true CN111367768A (zh) 2020-07-03

Family

ID=71210645

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010236195.5A Pending CN111367768A (zh) 2020-03-30 2020-03-30 程序的函数响应时间监控方法及装置

Country Status (1)

Country Link
CN (1) CN111367768A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112306803A (zh) * 2020-10-29 2021-02-02 金蝶云科技有限公司 一种性能监控方法及相关设备
CN112839096A (zh) * 2021-01-14 2021-05-25 平安国际智慧城市科技股份有限公司 监控函数执行时长的方法、装置、计算机设备及存储介质
CN113254317A (zh) * 2021-07-02 2021-08-13 浩鲸云计算科技股份有限公司 基于字节码的指标自动生成方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102122263A (zh) * 2011-03-23 2011-07-13 成都勤智数码科技有限公司 一种java应用系统运行时监控方法和装置
CN104346148A (zh) * 2013-07-30 2015-02-11 阿里巴巴集团控股有限公司 获取程序性能消耗信息的方法、装置及系统
CN104391787A (zh) * 2014-11-13 2015-03-04 华为软件技术有限公司 一种针对目标方法的监控、热切入方法及装置
CN107632920A (zh) * 2017-09-16 2018-01-26 广西电网有限责任公司电力科学研究院 一种输变电设备监测装置深度监控方法
CN110728575A (zh) * 2019-07-15 2020-01-24 国家电网有限公司 一种电力交易平台web安全深度监控方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102122263A (zh) * 2011-03-23 2011-07-13 成都勤智数码科技有限公司 一种java应用系统运行时监控方法和装置
CN104346148A (zh) * 2013-07-30 2015-02-11 阿里巴巴集团控股有限公司 获取程序性能消耗信息的方法、装置及系统
CN104391787A (zh) * 2014-11-13 2015-03-04 华为软件技术有限公司 一种针对目标方法的监控、热切入方法及装置
CN107632920A (zh) * 2017-09-16 2018-01-26 广西电网有限责任公司电力科学研究院 一种输变电设备监测装置深度监控方法
CN110728575A (zh) * 2019-07-15 2020-01-24 国家电网有限公司 一种电力交易平台web安全深度监控方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112306803A (zh) * 2020-10-29 2021-02-02 金蝶云科技有限公司 一种性能监控方法及相关设备
CN112839096A (zh) * 2021-01-14 2021-05-25 平安国际智慧城市科技股份有限公司 监控函数执行时长的方法、装置、计算机设备及存储介质
CN112839096B (zh) * 2021-01-14 2022-07-22 深圳赛安特技术服务有限公司 监控函数执行时长的方法、装置、计算机设备及存储介质
CN113254317A (zh) * 2021-07-02 2021-08-13 浩鲸云计算科技股份有限公司 基于字节码的指标自动生成方法及系统

Similar Documents

Publication Publication Date Title
EP2992431B1 (en) Activity based sampling of diagnostics data
CN111367768A (zh) 程序的函数响应时间监控方法及装置
CN110795357B (zh) 程序监控方法及装置
US8219856B2 (en) Memory growth detection
US20160026556A1 (en) Call chain interval resource impact unification
US8312417B2 (en) Using dynamic call graphs for creating state machines
US10528456B2 (en) Determining idle testing periods
CN112799940B (zh) 回归测试方法、装置、计算机系统和计算机可读存储介质
US20130275951A1 (en) Race detection for web applications
US20060225051A1 (en) Method and system for code coverage
CN106326067A (zh) 一种在压力测试下对cpu性能进行监控的方法及装置
US20130179867A1 (en) Program Code Analysis System
US20180159724A1 (en) Automatic task tracking
CN110704303B (zh) 一种测试覆盖度信息的获取方法及装置
CN114185874A (zh) 一种基于大数据的建模方法、装置、开发框架及设备
CN113704129A (zh) 一种回归测试方法、装置、存储介质和设备
CN108280009B (zh) 一种监控网格资源的方法及终端
CN111221721A (zh) 一种单元测试案例自动化录制和执行方法及装置
CN112612697A (zh) 一种基于字节码技术的软件缺陷测试定位方法及系统
CN113934642B (zh) 一种基于动静态结合的软件兼容性测试方法
CN107656849B (zh) 一种软件系统性能问题定位方法以及装置
CN113641594B (zh) 跨端自动化测试方法以及相关装置
US9760388B1 (en) Memory monitoring tool
CN117992359B (zh) 服务化软件的观测方法、装置和电子设备
CN117155628B (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
TA01 Transfer of patent application right

Effective date of registration: 20220927

Address after: 12 / F, 15 / F, 99 Yincheng Road, Pudong New Area pilot Free Trade Zone, Shanghai, 200120

Applicant after: Jianxin Financial Science and Technology Co.,Ltd.

Address before: 25 Financial Street, Xicheng District, Beijing 100033

Applicant before: CHINA CONSTRUCTION BANK Corp.

Applicant before: Jianxin Financial Science and Technology Co.,Ltd.

TA01 Transfer of patent application right