CN111026601A - Java应用***的监控方法、装置、电子设备及存储介质 - Google Patents

Java应用***的监控方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN111026601A
CN111026601A CN201910900316.9A CN201910900316A CN111026601A CN 111026601 A CN111026601 A CN 111026601A CN 201910900316 A CN201910900316 A CN 201910900316A CN 111026601 A CN111026601 A CN 111026601A
Authority
CN
China
Prior art keywords
monitoring
java
agent
application system
jvm
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
CN201910900316.9A
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.)
Rajax Network Technology Co Ltd
Original Assignee
Rajax Network Technology 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 Rajax Network Technology Co Ltd filed Critical Rajax Network Technology Co Ltd
Priority to CN201910900316.9A priority Critical patent/CN111026601A/zh
Publication of CN111026601A publication Critical patent/CN111026601A/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/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例公开了一种Java应用***的监控方法、装置、电子设备及存储介质,通过agent代理在需要被监控的应用程序的类文件中的指定行号的指定位置嵌入监控逻辑代码,以在被监控的应用程序被调用时,执行该监控逻辑业务代码,从而获取监控数据。由此,本实施例可以更精确地在指定位置嵌入监控逻辑代码,从而可以提高监控数据的准确性和时效性,以提高对Java应用***性能的分析、诊断、故障定位和解决故障的效率。

Description

Java应用***的监控方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机应用技术领域,更具体地,涉及一种Java应用***的监控方法、装置、电子设备及存储介质。
背景技术
随着IT建设的不断深入和完善,计算机硬件***的运行维护变得日益重要。其中,保证应用***正常持续运行的一个重要方面是对应用***的行为进行监控,当发现其行为不符合与其或出现异常时及时告警,以便维护人员对问题进行处理,排除故障或潜在的问题。在监控技术中,一般采用各种探针从外部观测应用***占用的CPU、内存资源等,不能检测应用***内部行为,无法对深层次***问题进行定位、分析。因此,如何在应用***运行环境中,在对业务影响尽可能低的情况下,准确及时地检测应用程序内部行为,是当前亟待解决的问题。
发明内容
有鉴于此,本发明实施例提供一种Java应用***的监控方法、装置、电子设备及存储介质,以精确地在指定位置嵌入监控逻辑代码,从而提高监控数据的准确性和时效性,进而提高对Java应用***性能的分析、诊断、故障定位和解决故障的效率。
第一方面,本发明实施例提供一种Java应用***的监控方法,所述Java应用***上部署有Java虚拟机JVM,所述方法包括:
启动所述Java虚拟机JVM,加载agent代理;
根据配置文件加载需要监控的应用程序的类文件,所述配置文件包括类文件名和需要嵌入的监控逻辑代码;
确定所述类文件中需要嵌入所述监控逻辑代码的指定行号;
控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码;
在被监控的应用程序被调用时,执行所述监控逻辑代码,以获取监控数据。
可选的,所述Java应用***上部署有Java字节码操纵框架ASM;
控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码具体为:
使得所述agent代理控制所述Java字节码操纵框架ASM修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码。
可选的,所述指定行号的预定位置为所述指定行号的行末。
可选的,所述类文件中被嵌入有监控指标逻辑。
可选的,所述方法还包括:
在被监控的应用程序被调用时,获取所述监控指标;
基于所述监控指标根据所述监控数据确定所述java应用***的性能和故障信息。
可选的,所述启动所述Java虚拟机JVM,加载agent代理具体为:
启动所述Java虚拟机JVM,根据JVMTI接口加载所述agent代理。
第二方面,本发明实施例提供一种Java应用***的监控装置,所述Java应用***上部署有Java虚拟机JVM,所述装置包括:
启动单元,被配置为启动所述Java虚拟机JVM,加载agent代理;
加载单元,被配置为根据配置文件加载需要监控的应用程序的类文件,所述配置文件包括类文件名和需要嵌入的监控逻辑代码;
指定行号确定单元,被配置为确定所述类文件中需要嵌入所述监控逻辑代码的指定行号;
嵌入单元,被配置为控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码;
执行单元,被配置为在被监控的应用程序被调用时,执行所述监控逻辑代码,以获取监控数据。
可选的,所述Java应用***上部署有Java字节码操纵框架ASM;
所述嵌入单元包括:
嵌入子单元,被配置为使得所述agent代理控制所述Java字节码操纵框架ASM修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码。
可选的,所述指定行号的预定位置为所述指定行号的行末。
可选的,所述类文件中被嵌入有监控指标逻辑。
可选的,所述装置还包括:
监控指标获取单元,被配置为在被监控的应用程序被调用时,获取所述监控指标;
信息确定单元,被配置为基于所述监控指标根据所述监控数据确定所述java应用***的性能和故障信息。
可选的,所述启动单元包括:
启动子单元,被配置为启动所述Java虚拟机JVM,根据JVMTI接口加载所述agent代理。
第三方面,本发明实施例提供一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如如上所述的方法。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现如上所述的方法。
本发明实施例通过agent代理在需要被监控的应用程序的类文件中的指定行号的指定位置嵌入监控逻辑代码,以在被监控的应用程序被调用时,执行该监控逻辑业务代码,从而获取监控数据。由此,本实施例可以更精确地在指定位置嵌入监控逻辑代码,从而可以提高监控数据的准确性和时效性,以提高对Java应用***性能的分析、诊断、故障定位和解决故障的效率。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是本发明实施例的Java应用***的监控方法的流程图;
图2是本发明实施例的Java应用***的监控方法的示意图;
图3是本发明实施例的Java应用***的监控方法的原理示意图;
图4是本发明实施例的Java应用***的监控装置的示意图;
图5是本发明实施例的电子设备的示意图。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。
此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
除非上下文明确要求,否则在说明书的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
图1是本发明实施例的Java应用***的监控方法的流程图。在本实施例中,Java应用***上部署有Java虚拟机JVM(Java Virtual Machine)。JVM是一种用于计算设备的规范,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算功能来实现。JVM定义了5种规格以实现Java程序的运行:JVM指令***、JVM寄存器、JVM栈结构、JVM碎片回收堆和JVM存储区。JVM可以使得Java语言屏蔽与具体操作***平台相关的信息,使Java语言编译程序只需生成在JVM上运行的目标代码(也即字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,把字节码解释成具体操作***平台上的机器指令执行,由此,可以实现Java程序“一次编译,到处运行”。
Java字节码是Java代码经过编译后得到的.class文件,能够被JVM正确地执行。Java探针使用Java字节码增强技术,构建一个独立于业务程序的代理程序(也即agent代理),用来检测和协助运行在JVM上的程序,甚至可以动态替换和修改某些类的定义,从而实现代码级业务性能监控和故障定位。
如图1所示,本实施例的Java应用***的监控方法包括以下步骤:
步骤S100,启动所述Java虚拟机JVM,加载agent代理。在一种可选的实现方式中,启动所述Java虚拟机JVM,根据JVMTI接口(Java Virtual Machine Tool Interface)加载所述agent代理。JVMTI接口是JDK提供的一套用于开发JVM监控、问题定位与性能调优工具的通用编程接口。在本实施例中,agent代理基于JVMTI接口开发,以共享库的形式存在,在JVM启动时,会根据JVMTI接口动态加载agent代理。
步骤S200,根据配置文件加载需要监控的应用程序的类文件,其中,该配置文件包括类文件名和需要嵌入的监控逻辑代码。可选的,上述监控逻辑代码包括选择参数,其中,选择参数包括嵌入位置之前的至少一个可访问参数。
步骤S300,确定被监控的应用程序的类文件中需要嵌入上述监控逻辑代码的指定行号。由于JVM运行的目标代码为字节码,而在类文件对应的字节码中保留了源代码的行号(LINENUMBER),因此,在本实施例中,通过在指定行号处嵌入监控逻辑代码,可以提高在指定位置嵌入监控逻辑代码的精确度,进而提高监控数据的准确性和获取监控数据的效率。
步骤S400,控制agent代理修改所述类文件的字节码,以在指定行号的预定位置嵌入所述监控逻辑代码。可选的,指定行号的预定位置为该指定行号的行末。由此,可以进一步提高在指定位置嵌入监控逻辑代码的精确度。
在一种可选的实现方式中,本实施例的Java应用***上部署有Java字节码操纵框架ASM。步骤S400具体为:
控制agent代理使得Java字节码操纵框架ASM修改上述类文件的字节码,以在指定行号的预定位置嵌入所述监控逻辑代码。
ASM是一个Java字节码操作框架,可以用来动态生成类或者增强既有类的功能,ASM可以直接生成二进制类文件,也可以在类文件被加载入JVM之前动态改变类行为。Java类被存储在严格格式定义的.class文件中,这些类文件包括足够的元数据来解析类中的类名称、方法、属性及Java字节码(Java指令)等元素。ASM从类文件中读入信息后,能够改变类行为、分析类信息、甚至能够根据用户要求生成新的类文件。
在本实施例中,控制ASM字节码操控框架生成二进制类文件A.class,并根据JVM中的类加载器classLoader将类文件A.class装载入JVM,在载入类文件A.class的过程中,根据配置文件使得agent代理在类文件A.class的字节码中的指定行号行末嵌入上述监控逻辑代码,生成修改后的类文件A'.class。
步骤S500,在被监控的应用程序被调用时,执行监控逻辑代码,以获取监控数据。具体地,在被监控的应用程序被调用时,例如被监控的应用程序中包括上述类文件A.class,则JVM中的引擎engine会获取并执行嵌入监控逻辑代码的类文件A'.class,其中,执行类文件A'.class可以类文件A.class的正常业务逻辑,同时可以执行监控逻辑代码,以获取监控数据。
在一种可选的实现方式中,Java应用***的应用程序中的类文件被嵌入有监控指标逻辑。其中,本实施例的监控方法还包括:
在被监控的应用程序被调用时,获取所述监控指标,并基于上述监控指标根据获取的监控数据确定java应用***的性能和故障信息。
在另一种可选的实现方式中,配置文件可以包括监控指标,由此,可以根据配置文件获取监控指标,并根据监控指标和监控数据确定java应用***的性能和故障信息。
其中,监控指标包括Java应用***平均响应时间指标、Java应用***中单个事务的平均响应时间指标、代码执行时间指标、Java应用***的吞吐量指标、Java应用***错误率指标等指标中的至少一个。由此,可以通过该监控指标对监控数据进行分析以确定Java应用***的各个性能和故障信息。
在一种可选的实现方式中,JVM中的agent代理周期性地向外发送监控数据,例如1分钟,采用预定的性能剖析技术(例如Eclipse Memory Analyzer等)根据监控数据进行分析。其中,性能剖析是在指定时间范围内定时的调用***中断,然后终端应用程序获取当前的调用栈信息,记录调用栈中出现的函数和这些函数的调用结构,基于这些信息获取函数的调用关系图及每个函数的CPU使用信息,通过这些信息可以清楚地得到执行各个方法的花费时间等信息。
本实施例通过agent代理在需要被监控的应用程序的类文件中的指定行号的指定位置嵌入监控逻辑代码,以在被监控的应用程序被调用时,执行该监控逻辑业务代码,从而获取监控数据。由此,本实施例可以更精确地在指定位置嵌入监控逻辑代码,从而可以提高监控数据的准确性和时效性,以提高对Java应用***性能的分析、诊断、故障定位和解决故障的效率。
图2是本发明实施例的Java应用***的监控方法的示意图。在本实施例中,agent代理包括动态链接库等,在Java程序启动时,将其作为Java程序的一部分进行加载。如图2所示,在JVM21启动时,JVM21根据运行参数查找agent代理22中的动态链接库221,根据JVMTI规范,调用agent_onload方法并进行初始化。在此过程中,agent代理22读取配置文件23,以确定要监控的应用程序中的类文件,然后据此向JVM21声明感兴趣的事件(例如应用程序的响应时间等)。在这些事件发生时,相关的回调函数会被执行,以获取这些事件结果。通过这种机制,agent代理22可以在类文件被加载时,通过ASM字节码操纵框架动态修改Java程序的字节码,以在指定位置嵌入监控逻辑代码。在本实施例中,通过在指定行号的行末嵌入监控逻辑代码以更精确地在指定位置嵌入监控逻辑代码,从而提高监控数据的准确性和时效性。在对应类的方法被执行时,相关的监控逻辑代码被执行,从而获取应用程序211的监控数据(例如行为统计)。例如应用程序211包括类文件A.class,感兴趣时间包括A.class的执行时延,agent代理会在A.class被加载时通过ASM修改类中相关方法的字节码,以使得开始执行该方法时取得***时间,在方法执行完毕时再次取得***时间,并计算两者差值,以获取该方法的执行耗时。agent代理22被加载后会启动数据发送线程222,数据发送线程222周期性地通过网络将监控数据发送给数据收集单元24。性能剖析单元25可以通过数据收集单元24收集的监控数据进行剖析,输出Java应用***的性能和故障信息。
本实施例通过agent代理在需要被监控的应用程序的类文件中的指定行号的指定位置嵌入监控逻辑代码,以在被监控的应用程序被调用时,执行该监控逻辑业务代码,从而获取监控数据。由此,本实施例可以更精确地在指定位置嵌入监控逻辑代码,从而可以提高监控数据的准确性和时效性,以提高对Java应用***性能的分析、诊断、故障定位和解决故障的效率。
图3是本发明实施例的Java应用***的监控方法的原理示意图。在本实施例中,使用Java字节码技术监控Java应用***中应用程序的运行,以获取各项监控数据,并采用预定的性能剖析技术对Java应用***的性能进行分析。其中,Java应用***上部署有Java虚拟机JVM和ASM字节码操纵框架,应用程序运行在JVM上。
如图3所示,在ASM字节码操纵框架中直接生成二进制文件A.class文件,根据JVM中的类加载器classLoader将A.class文件装载入JVM,在载入类文件A.class的过程中,JVM中的javaagent根据配置文件在类文件A.class的字节码中的指定行号行末嵌入上述监控逻辑代码,生成修改后的类文件A'.class。当有请求需要调用类文件A.class时,则JVM中的引擎engine会获取并执行嵌入监控逻辑代码的类文件A'.class,其中,执行类文件A'.class可以类文件A.class的正常业务逻辑,同时可以执行监控逻辑代码,以获取监控数据。之后,JVM中的引擎engine将获取的监控数据写入监控数据缓存区。可选的,agent代理中的数据发送线程周期性(例如每隔1min)地发送监控数据,并清理监控数据缓存区。
本实施例通过agent代理在需要被监控的应用程序的类文件中的指定行号的指定位置嵌入监控逻辑代码,以在被监控的应用程序被调用时,执行该监控逻辑业务代码,从而获取监控数据。由此,本实施例可以更精确地在指定位置嵌入监控逻辑代码,从而可以提高监控数据的准确性和时效性,以提高对Java应用***性能的分析、诊断、故障定位和解决故障的效率。
图4是本发明实施例的Java应用***的监控装置的示意图。在本实施例中,Java应用***上部署有Java虚拟机JVM。如图4所示,本实施例中的Java应用***的监控装置4包括启动单元41、加载单元42、指定行号确定单元43、嵌入单元44、执行单元45。
启动单元41,被配置为启动所述Java虚拟机JVM,加载agent代理。在一种可选的实现方式中,启动单元41包括启动子单元,其中,启动子单元被配置为启动所述Java虚拟机JVM,根据JVMTI接口加载所述agent代理。
加载单元42,被配置为根据配置文件加载需要监控的应用程序的类文件,所述配置文件包括类文件名和需要嵌入的监控逻辑代码。
指定行号确定单元43,被配置为确定所述类文件中需要嵌入所述监控逻辑代码的指定行号。
嵌入单元44,被配置为控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码。在一种可选的实现方式中,嵌入单元44包括嵌入子单元,嵌入子单元被配置为使得所述agent代理控制所述Java字节码操纵框架ASM修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码。在一种可选的实现方式中,指定行号的预定位置为所述指定行号的行末。
执行单元45被配置为在被监控的应用程序被调用时,执行所述监控逻辑代码,以获取监控数据。
在一种可选的实现方式中,所述类文件中被嵌入有监控指标逻辑,本实施例的Java应用***的监控装置4还包括监控指标获取单元和信息确定单元。其中,监控指标获取单元被配置为在被监控的应用程序被调用时,获取所述监控指标。信息确定单元,被配置为基于所述监控指标根据所述监控数据确定所述java应用***的性能和故障信息。
本实施例通过agent代理在需要被监控的应用程序的类文件中的指定行号的指定位置嵌入监控逻辑代码,以在被监控的应用程序被调用时,执行该监控逻辑业务代码,从而获取监控数据。由此,本实施例可以更精确地在指定位置嵌入监控逻辑代码,从而可以提高监控数据的准确性和时效性,以提高对Java应用***性能的分析、诊断、故障定位和解决故障的效率。
图5是本发明实施例的电子设备的示意图。在本实施例中,电子设备5包括服务器、终端等。如图5所示,该电子设备5:至少包括一个处理器501;以及,与至少一个处理器501通信连接的存储器502;以及,与扫描装置通信连接的通信组件503,通信组件503在处理器501的控制下接收和发送数据;其中,存储器502存储有可被至少一个处理器501执行的指令,指令被至少一个处理器501执行以实现如下步骤:
启动所述Java虚拟机JVM,加载agent代理;
根据配置文件加载需要监控的应用程序的类文件,所述配置文件包括类文件名和需要嵌入的监控逻辑代码;
确定所述类文件中需要嵌入所述监控逻辑代码的指定行号;
控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码;
在被监控的应用程序被调用时,执行所述监控逻辑代码,以获取监控数据。
可选的,所述Java应用***上部署有Java字节码操纵框架ASM;
控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码具体为:
使得所述agent代理控制所述Java字节码操纵框架ASM修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码。
可选的,所述指定行号的预定位置为所述指定行号的行末。
可选的,所述类文件中被嵌入有监控指标逻辑。
可选的,所述电子设备还用于实现如下步骤:
在被监控的应用程序被调用时,获取所述监控指标;
基于所述监控指标根据所述监控数据确定所述java应用***的性能和故障信息。
可选的,启动所述Java虚拟机JVM,加载agent代理具体为:
启动所述Java虚拟机JVM,根据JVMTI接口加载所述agent代理。
具体地,该电子设备包括:一个或多个处理器501以及存储器502,图5中以一个处理器501为例。处理器501、存储器502可以通过总线或者其他方式连接,图5中以通过总线连接为例。存储器502作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。处理器501通过运行存储在存储器502中的非易失性软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述Java应用***的监控方法。
存储器502可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储选项列表等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器502可选包括相对于处理器501远程设置的存储器,这些远程存储器可以通过网络连接至外接设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
一个或者多个模块存储在存储器502中,当被一个或者多个处理器501执行时,执行上述任意方法实施例中的Java应用***的监控处理方法。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果,未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
本发明实施例通过agent代理在需要被监控的应用程序的类文件中的指定行号的指定位置嵌入监控逻辑代码,以在被监控的应用程序被调用时,执行该监控逻辑业务代码,从而获取监控数据。由此,本实施例可以更精确地在指定位置嵌入监控逻辑代码,从而可以提高监控数据的准确性和时效性,以提高对Java应用***性能的分析、诊断、故障定位和解决故障的效率。
本发明的另一实施例涉及一种非易失性存储介质,用于存储计算机可读程序,所述计算机可读程序用于供计算机执行上述部分或全部的方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
本发明实施例公开了A1、一种Java应用***的监控方法,其中,所述Java应用***上部署有Java虚拟机JVM,所述方法包括:
启动所述Java虚拟机JVM,加载agent代理;
根据配置文件加载需要监控的应用程序的类文件,所述配置文件包括类文件名和需要嵌入的监控逻辑代码;
确定所述类文件中需要嵌入所述监控逻辑代码的指定行号;
控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码;
在被监控的应用程序被调用时,执行所述监控逻辑代码,以获取监控数据。
A2、根据A1所述的方法,其中,所述Java应用***上部署有Java字节码操纵框架ASM;
所述控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码具体为:
使得所述agent代理控制所述Java字节码操纵框架ASM修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码。
A3、根据A1或A2所述的方法,其中,所述指定行号的预定位置为所述指定行号的行末。
A4、根据A1所述的方法,其中,所述类文件中被嵌入有监控指标逻辑。
A5、根据A4所述的方法,其中,所述方法还包括:
在被监控的应用程序被调用时,获取所述监控指标;
基于所述监控指标根据所述监控数据确定所述java应用***的性能和故障信息。
A6、根据A1所述的方法,其中,所述启动所述Java虚拟机JVM,加载agent代理具体为:
启动所述Java虚拟机JVM,根据JVMTI接口加载所述agent代理。
本发明实施例还公开了B1、一种Java应用***的监控装置,其中,所述Java应用***上部署有Java虚拟机JVM,所述装置包括:
启动单元,被配置为启动所述Java虚拟机JVM,加载agent代理;
加载单元,被配置为根据配置文件加载需要监控的应用程序的类文件,所述配置文件包括类文件名和需要嵌入的监控逻辑代码;
指定行号确定单元,被配置为确定所述类文件中需要嵌入所述监控逻辑代码的指定行号;
嵌入单元,被配置为控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码;
执行单元,被配置为在被监控的应用程序被调用时,执行所述监控逻辑代码,以获取监控数据。
B2、根据B1所述的装置,其中,所述Java应用***上部署有Java字节码操纵框架ASM;
所述嵌入单元包括:
嵌入子单元,被配置为使得所述agent代理控制所述Java字节码操纵框架ASM修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码。
B3、根据B1或B2所述的装置,其中,所述指定行号的预定位置为所述指定行号的行末。
B4、根据B1所述的装置,其中,所述类文件中被嵌入有监控指标逻辑。
B5、根据B4所述的装置,其中,所述装置还包括:
监控指标获取单元,被配置为在被监控的应用程序被调用时,获取所述监控指标;
信息确定单元,被配置为基于所述监控指标根据所述监控数据确定所述java应用***的性能和故障信息。
B6、根据B1所述的装置,其中,所述启动单元包括:
启动子单元,被配置为启动所述Java虚拟机JVM,根据JVMTI接口加载所述agent代理。
本发明实施例还公开了C1、一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如A1-A6中任一项所述的方法。
本发明实施例还公开了D1、一种计算机可读存储介质,其上存储计算机程序指令,其中,所述计算机程序指令在被处理器执行时实现如A1-A6中任一项所述的方法。

Claims (10)

1.一种Java应用***的监控方法,其特征在于,所述Java应用***上部署有Java虚拟机JVM,所述方法包括:
启动所述Java虚拟机JVM,加载agent代理;
根据配置文件加载需要监控的应用程序的类文件,所述配置文件包括类文件名和需要嵌入的监控逻辑代码;
确定所述类文件中需要嵌入所述监控逻辑代码的指定行号;
控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码;
在被监控的应用程序被调用时,执行所述监控逻辑代码,以获取监控数据。
2.根据权利要求1所述的方法,其特征在于,所述Java应用***上部署有Java字节码操纵框架ASM;
所述控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码具体为:
使得所述agent代理控制所述Java字节码操纵框架ASM修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码。
3.根据权利要求1或2所述的方法,其特征在于,所述指定行号的预定位置为所述指定行号的行末。
4.根据权利要求1所述的方法,其特征在于,所述类文件中被嵌入有监控指标逻辑。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在被监控的应用程序被调用时,获取所述监控指标;
基于所述监控指标根据所述监控数据确定所述java应用***的性能和故障信息。
6.根据权利要求1所述的方法,其特征在于,所述启动所述Java虚拟机JVM,加载agent代理具体为:
启动所述Java虚拟机JVM,根据JVMTI接口加载所述agent代理。
7.一种Java应用***的监控装置,其特征在于,所述Java应用***上部署有Java虚拟机JVM,所述装置包括:
启动单元,被配置为启动所述Java虚拟机JVM,加载agent代理;
加载单元,被配置为根据配置文件加载需要监控的应用程序的类文件,所述配置文件包括类文件名和需要嵌入的监控逻辑代码;
指定行号确定单元,被配置为确定所述类文件中需要嵌入所述监控逻辑代码的指定行号;
嵌入单元,被配置为控制所述agent代理修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码;
执行单元,被配置为在被监控的应用程序被调用时,执行所述监控逻辑代码,以获取监控数据。
8.根据权利要求7所述的装置,其特征在于,所述Java应用***上部署有Java字节码操纵框架ASM;
所述嵌入单元包括:
嵌入子单元,被配置为使得所述agent代理控制所述Java字节码操纵框架ASM修改所述类文件的字节码,以在所述指定行号的预定位置嵌入所述监控逻辑代码。
9.一种电子设备,包括存储器和处理器,其特征在于,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如权利要求1-6中任一项所述的方法。
10.一种计算机可读存储介质,其上存储计算机程序指令,其特征在于,所述计算机程序指令在被处理器执行时实现如权利要求1-6中任一项所述的方法。
CN201910900316.9A 2019-09-23 2019-09-23 Java应用***的监控方法、装置、电子设备及存储介质 Pending CN111026601A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910900316.9A CN111026601A (zh) 2019-09-23 2019-09-23 Java应用***的监控方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910900316.9A CN111026601A (zh) 2019-09-23 2019-09-23 Java应用***的监控方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN111026601A true CN111026601A (zh) 2020-04-17

Family

ID=70203830

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910900316.9A Pending CN111026601A (zh) 2019-09-23 2019-09-23 Java应用***的监控方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN111026601A (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111625463A (zh) * 2020-05-28 2020-09-04 北京达佳互联信息技术有限公司 一种程序状态检测方法和装置
CN111679984A (zh) * 2020-06-08 2020-09-18 中国银行股份有限公司 一种性能分析方法和装置
CN111797014A (zh) * 2020-06-30 2020-10-20 中国工商银行股份有限公司 跨应用的案例追踪方法及装置
CN112100054A (zh) * 2020-08-12 2020-12-18 北京大学 一种面向数据管控的程序静态分析方法和***
CN112527638A (zh) * 2020-12-01 2021-03-19 北京大米科技有限公司 程序监控***、方法和计算机可读存储介质
CN112860517A (zh) * 2021-02-10 2021-05-28 中国工商银行股份有限公司 一种基于分布式应用的性能诊断方法、装置及设备
CN112988516A (zh) * 2021-03-18 2021-06-18 上海新炬网络技术有限公司 基于日志增强实现全局业务监控的方法
CN113282495A (zh) * 2021-05-27 2021-08-20 东南大学 一种基于轨迹监控的Java软件故障定位方法
CN113377614A (zh) * 2021-06-08 2021-09-10 北京百度网讯科技有限公司 调用链信息的生成方法、装置、电子设备及存储介质
CN113448588A (zh) * 2021-07-09 2021-09-28 天津狮拓信息技术有限公司 数据安全处理方法、装置、电子设备和存储介质
CN113986736A (zh) * 2021-10-29 2022-01-28 重庆富民银行股份有限公司 基于java代理和字节码增强的慢sql监控***及方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050028155A1 (en) * 2002-12-02 2005-02-03 Samsung Electronics Co., Ltd. Java execution device and Java execution method
CN102622289A (zh) * 2011-01-26 2012-08-01 阿里巴巴集团控股有限公司 程序设置方法、程序监控方法与装置、***

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050028155A1 (en) * 2002-12-02 2005-02-03 Samsung Electronics Co., Ltd. Java execution device and Java execution method
CN102622289A (zh) * 2011-01-26 2012-08-01 阿里巴巴集团控股有限公司 程序设置方法、程序监控方法与装置、***

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111625463A (zh) * 2020-05-28 2020-09-04 北京达佳互联信息技术有限公司 一种程序状态检测方法和装置
CN111625463B (zh) * 2020-05-28 2024-02-13 北京达佳互联信息技术有限公司 一种程序状态检测方法和装置
CN111679984B (zh) * 2020-06-08 2023-09-19 中国银行股份有限公司 一种性能分析方法和装置
CN111679984A (zh) * 2020-06-08 2020-09-18 中国银行股份有限公司 一种性能分析方法和装置
CN111797014A (zh) * 2020-06-30 2020-10-20 中国工商银行股份有限公司 跨应用的案例追踪方法及装置
CN112100054A (zh) * 2020-08-12 2020-12-18 北京大学 一种面向数据管控的程序静态分析方法和***
CN112100054B (zh) * 2020-08-12 2021-07-20 北京大学 一种面向数据管控的程序静态分析方法和***
CN112527638A (zh) * 2020-12-01 2021-03-19 北京大米科技有限公司 程序监控***、方法和计算机可读存储介质
CN112860517A (zh) * 2021-02-10 2021-05-28 中国工商银行股份有限公司 一种基于分布式应用的性能诊断方法、装置及设备
CN112988516A (zh) * 2021-03-18 2021-06-18 上海新炬网络技术有限公司 基于日志增强实现全局业务监控的方法
CN113282495A (zh) * 2021-05-27 2021-08-20 东南大学 一种基于轨迹监控的Java软件故障定位方法
CN113282495B (zh) * 2021-05-27 2024-03-22 东南大学 一种基于轨迹监控的Java软件故障定位方法
CN113377614B (zh) * 2021-06-08 2023-07-25 北京百度网讯科技有限公司 调用链信息的生成方法、装置、电子设备及存储介质
CN113377614A (zh) * 2021-06-08 2021-09-10 北京百度网讯科技有限公司 调用链信息的生成方法、装置、电子设备及存储介质
CN113448588A (zh) * 2021-07-09 2021-09-28 天津狮拓信息技术有限公司 数据安全处理方法、装置、电子设备和存储介质
CN113448588B (zh) * 2021-07-09 2024-04-16 天津狮拓信息技术有限公司 数据安全处理方法、装置、电子设备和存储介质
CN113986736A (zh) * 2021-10-29 2022-01-28 重庆富民银行股份有限公司 基于java代理和字节码增强的慢sql监控***及方法

Similar Documents

Publication Publication Date Title
CN111026601A (zh) Java应用***的监控方法、装置、电子设备及存储介质
US10586053B2 (en) Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
US9940225B2 (en) Automated error checking system for a software application and method therefor
KR101269549B1 (ko) 오류 주입을 이용한 소프트웨어 신뢰성 테스트 시스템 및 방법
CN111651366B (zh) Sdk测试方法、装置、设备及存储介质
KR100868762B1 (ko) 임베디드용 소프트웨어의 오류 검출 방법
US20110191752A1 (en) Method and System for Debugging of Software on Target Devices
US7900198B2 (en) Method and system for parameter profile compiling
KR101438990B1 (ko) 시스템 테스트 방법
US8448147B2 (en) Heterogenic Coverage Analysis
US10579513B2 (en) Test run control method and apparatus
US7546585B2 (en) Method, system and computer program product for testing computer programs
CN111382048B (zh) 真机测试平台上移动设备的管理方法和装置
US11422920B2 (en) Debugging multiple instances of code using thread patterns
CN109255240B (zh) 一种漏洞处理方法和装置
CN114297666B (zh) 一种基于模糊测试的云部署自动化漏洞挖掘***
CN110928777B (zh) 测试用例的处理方法、装置、设备及存储介质
JP2010033543A (ja) ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム
CN103186463B (zh) 确定软件的测试范围的方法和***
US20080127118A1 (en) Method and system for dynamic patching of software
US8533683B2 (en) Stack walking enhancements using sensorpoints
US20080127119A1 (en) Method and system for dynamic debugging of software
Panigrahi et al. An approach to prioritize the regression test cases of object-oriented programs
CN109783284A (zh) 信息获取方法、***及服务器、计算机可读存储介质
CN115391228A (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