CN102622289B - 程序设置方法、程序监控方法与装置、系统 - Google Patents
程序设置方法、程序监控方法与装置、系统 Download PDFInfo
- Publication number
- CN102622289B CN102622289B CN201110028307.9A CN201110028307A CN102622289B CN 102622289 B CN102622289 B CN 102622289B CN 201110028307 A CN201110028307 A CN 201110028307A CN 102622289 B CN102622289 B CN 102622289B
- Authority
- CN
- China
- Prior art keywords
- bytecode
- monitoring
- monitored
- item
- recognition rule
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种程序设置方法、装置及系统,用以解决现有技术中采用的Java应用系统监控方案在监控点发生变化的情况下,存在处理效率较低的问题。方法包括:获得监控脚本,并从所述监控脚本中解析出监控执行项和待监控字节码识别规则,其中所述监控执行项包含指示针对待监控字节码的监控项目的信息;根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码;执行将所述监控执行项植入确定的所述待监控字节码的操作。本申请实施例还提供一种程序监控方法、装置及系统。
Description
技术领域
本申请涉及程序监控技术领域,尤其涉及一种程序设置方法、装置及系统,以及一种程序监控方法、装置及系统。
背景技术
已部署上线的Java应用系统常常会发生性能问题,比如因Java应用系统的软硬件环境而引起故障等。为处理Java应用系统的性能问题,需要及时对与问题相关联的各种数据进行采集。目前,常用数据采集方式是通过对Java应用系统进行监控,从而获取相应的Java应用系统监控数据结果。
目前,常用的监控方案有以下几种:
1)远程系统级别监控;
此方案主要是通过利用一些监控工具采集共性的系统级别的监控数据,并通过网络远程将监控数据传输到监控中心,由监控中心对采集到的该系统级别的监控数据进行呈现。该方案的缺点在于只能采集到操作系统和硬件环境等软硬件环境的监控数据,如CPU占用率、内存使用情况、网络带宽占用等,而不能实现针对Java应用系统中所运行的Java应用程序的程序级别监控,因此该方案的使用场景比较受限。
2)在Java应用系统中静态增加监控模块;
此方案的主要思想在于,在Java应用程序加载到Java应用系统之前,预先从Java应用程序中确定出需要监控的字节码位置作为被监控点,并在Java应用系统中添加监控模块,由该监控模块采集监控数据并传输给监控中心,由监控中心呈现监控数据。该方案的缺点在于,需要在Java应用程序加载到Java应用系统之前确定被监控点,而上线后的Java应用系统所发生的问题往往是超出预料的,一旦发生的问题导致被监控点需发生变化,则需要将Java应用程序进行下线操作,因此处理效率不高。此外,在Java应用系统之中添加大量监控模块也会在系统性能上和可维护性上产生不良影响。
3)通过日志文件和Java虚拟机(JVM,Java Virtual Machine)监控工具采集监控数据。其中,JVM是一个虚构出来的计算机,其可以在实际的计算机上仿真模拟各种计算机功能,并对具体操作系统平台相关的信息进行了屏蔽,使得Java应用程序只需要生成在JVM上运行的目标字节码,就可以在多种平台上不加修改地运行。
此方案的主要思想在于,当已上线的Java应用系统发生问题时,利用JVM提供的监控工具从Java应用系统本身产生的日志文件中进行现场数据采集。此方案存在的缺点在于,导致Java应用系统本地产生并记录大量日志文件,需要及时维护和清理日志文件。
考虑到上述三种方式的优缺点,现有技术中较为常用的监控方案是上述方式二,然而如前文所述,在监控点发生变化的情况下,该方式存在处理效率较低的问题。
发明内容
本申请实施例提供一种程序设置方法、装置及系统,用以解决现有技术中采用的Java应用系统监控方案在监控点发生变化的情况下,存在处理效率较低的问题。
本申请实施例还提供一种程序监控方法、装置及系统。
本申请实施例采用以下技术方案:
一种程序设置方法,包括:获得监控脚本,并从所述监控脚本中解析出监控执行项和待监控字节码识别规则,其中所述监控执行项包含指示针对待监控字节码的监控项目的信息;根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码;执行将所述监控执行项植入确定的所述待监控字节码的操作。
较佳地,所述待监控字节码识别规则为用于指示待监控字节码标识的静态代码位置识别规则;以及根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码具体包括:从待监控应用程序包含的字节码中,确定与所述静态代码位置识别规则所指示的待监控对象标识对应的字节码。
较佳地,所述待监控字节码识别规则为用于指示启动监控待监控字节码的时机的动态事件识别规则;以及根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码具体包括:从预先设置的启动监控待监控字节码的时机与字节码位置的对应关系中,确定与解析出的动态事件识别规则所指示的所述时机对应的字节码位置;以及从待监控应用程序包含的字节码中确定位于确定的所述字节码位置处的字节码。
一种程序监控方法,包括:在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;以及获得运行所述监控执行项所生成的与所述监控项目对应的监控数据。
较佳地,该程序监控方法还包括:将获得的所述监控数据存储在所述应用系统的内存;并利用预先指定的线程,从所述内存中读取所述监控数据;根据所述应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识;并将读取到的所述监控数据发送给确定的数据处理服务器标识指示的数据处理服务器,指示该数据处理服务器根据所述监控数据生成监控报表。
一种程序设置装置,包括:监控脚本解析单元,用于从监控脚本中解析出监控执行项和待监控字节码识别规则,其中,所述监控执行项包含指示针对待监控字节码的监控项目的信息;字节码确定单元,用于根据监控脚本解析单元解析得到的待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码;植入单元,用于执行将监控脚本解析单元解析得到的监控执行项植入字节码确定单元确定的待监控字节码的操作。
一种程序监控装置,包括:监控执行项运行单元,用于在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;监控数据获得单元,用于获得通过监控执行项运行单元运行所述监控执行项所生成的与所述监控项目对应的监控数据。
一种程序设置系统,包括监控控制端、监控控制服务器、监控代理器和应用系统,其中:监控控制端,用于接收用户输入的监控脚本,并将所述监控脚本发送给监控控制服务器;监控控制服务器,用于将监控控制服务器发送来的所述监控脚本编译成监控代理器能识别的格式后发送给监控代理器;监控代理器,用于从监控控制服务器发送来的监控脚本中解析出监控执行项和待监控字节码识别规则,并根据所述待监控字节码识别规则,从应用系统上运行的待监控应用程序包含的字节码中确定待监控字节码,以及执行将所述监控执行项植入确定的待监控字节码的操作,其中,所述监控执行项包含指示针对待监控字节码的监控项目的信息。
一种程序监控系统,包括监控控制端、监控控制服务器、监控代理器和应用系统,其中:应用系统,用于在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,并获得运行所述监控执行项所生成的与所述监控项目对应的监控数据,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;监控代理器,用于获取应用系统获得的所述监控数据,并将所述监控数据发送给监控控制服务器;监控控制服务器,用于根据所述应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识,并将监控代理器发送来的所述监控数据发送给确定的数据处理服务器标识指示的数据处理服务器;数据处理服务器,用于根据监控控制服务器发送来的所述监控数据生成监控报表。
本申请实施例的有益效果如下:
通过本申请实施例提供的上述方案,即使是监控点发生变化,也无需将应用程序进行下线修改,而是可以根据针对新的监控点所编译的监控脚本动态实现在线修改,从而采用本申请实施例提供的该方案,在监控点发生变化的情况下,明显能够提高对应用程序进行监控的效率。
附图说明
图1为本申请实施例提供的一种程序设置方法的具体流程示意图;
图2为本申请实施例提供的一种程序监控方法的具体流程示意图;
图3为基于本申请实施例提供的方案所构造的一种监控系统示意图;
图4a为本申请实施例提供的方案在实际应用中的具体实现过程示意图;
图4b为本申请实施例提供的方案在实际应用中时序示意图;
图5为本申请实施例提供的一种程序设置装置的具体结构示意图;
图6为本申请实施例提供的一种程序监控装置的具体结构图;
图7为本申请实施例提供的一种程序设置系统的具体结构示意图。
具体实施方式
为了解决现有技术中采用的Java应用系统监控方案存在的处理效率较低的问题,本申请实施例提供了一种程序设置方案,目的是要实现为已部署上线的Java应用系统随时添加监控脚本,从而无需对Java应用系统执行下线操作也能随时根据需要调整被监控点,以此提高监控效率。
在Java应用系统中,字节码的执行机制是先把Java源文件编译成Java字节码文件,然后在JVM中运行Java字节码。本申请实施例提供的方案的具体实施思路在于,基于JVM工具接口(JVM TI,JVM Tool Interface,其是一个用于监控JVM的编程接口,基于该接口可以监控JVM状态并控制运行在JVM之上的Java应用程序)和Java Instrumentation(Java Instrumentation是基于java.lang.instrument动态改变和操作加载在JVM中的一种Java类)的机制动态替换JVM中的Java字节码,以此来为已部署上线的Java应用系统中的Java应用程序添加或移除监控脚本。本申请实施例提供的该程序设置方案不限于在Java应用系统中使用,也可以在运行基于其他字节码编写的应用程序的应用系统中使用。
以下结合附图,对申请实施例提供的程序设置方案进行详细说明。
首先,本申请实施例提供一种如图1所示的程序设置方法,该方法包括以下主要步骤:
步骤11,获得监控脚本,并从监控脚本中解析出监控执行项和待监控字节码识别规则,其中监控执行项包含指示针对待监控字节码的监控项目的信息;
步骤12,根据待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码,在本申请实施例中,待监控字节码识别规则可以但不限于为静态代码位置识别规则,也可以为动态事件识别规则,下文将分别对这两类规则进行详细说明;
步骤13,执行将监控执行项植入确定的待监控字节码的操作,比如,可以通过将待监控字节码替换为包含监控执行项的字节码的方式,实现将监控执行项植入确定的待监控字节码。
由本申请实施例提供的上述方法可知,在对待监控字节码进行监控时,可以根据监控脚本中包含的待监控字节码识别规则,确定出待监控字节码,从而可以很方便地将监控执行项植入到待监控字节码中。即使是监控点发生变化,也无需将应用程序进行下线修改,而是可以根据针对新的监控点所编译的监控脚本,动态实现在线修改,从而采用本申请实施例提供的该方案,在监控点发生变化的情况下,明显能够提高对应用程序进行监控的效率。
前文已经提到,在本申请实施例中,待监控字节码识别规则可以但不限于包括静态代码位置识别规则和动态事件识别规则,以下分别针对这两种规则进行说明:
1)静态代码位置识别规则用于指示待监控字节码标识,根据该静态代码位置识别规则,从待监控应用程序包含的字节码中确定待监控字节码的方式为:从待监控应用程序包含的字节码中,确定与静态代码位置识别规则所指示的待监控对象标识对应的字节码。其中,待监控字节码标识可以包含待监控字节码所对应的类的名称,比如可以包含Java应用系统中的java.awt.Component类,也可以包含待监控字节码在其所属的应用程序中所处位置的标识,可以包含java.awt.Component类的int方法的第5行,等等。
2)动态事件识别规则用于指示启动监控待监控字节码的时机,根据该动态事件识别规则,从待监控应用程序包含的字节码中确定待监控字节码的方式为:首先,从预先设置的启动监控待监控字节码的时机与字节码位置的对应关系中,确定与解析出的动态事件识别规则所指示的上述时机对应的字节码位置;然后,再从待监控应用程序包含的字节码中确定位于确定的该字节码位置处的字节码。其中,启动监控待监控字节码的时机可以视实际情况而定,比如可以以应用系统内存占用量达到100M作为该时机,也可以以应用系统中某类异常作为该时机,等等。
基于待监控字节码识别规则,由于可以根据实际需求将待监控的字节码指定为某段字节码,也可以指定为某个应用程序包含的所有字节码,因此本申请实施例提供的该程序设置方案可以实现对应用程序的细粒度监控,其监控精度可以达到一段字节码。
基于本申请提供的如图1所示的程序设置方法,本申请实施例还提供一种程序监控方法,该方法的具体流程示意图如图2所示,包括以下步骤:
步骤21,在运行应用系统中的待监控字节码时,执行运行植入待监控字节码中的监控执行项的操作,其中,监控执行项包含指示针对待监控字节码的监控项目的信息,针对待监控字节码的监控项目可以是运行待监控字节码所耗时长,也可以是待监控字节码运行过程中产生的日志信息,还可以是运行待监控字节码所耗内存量等等,此外,监控执行项可以包含一个监控项目,也可以包含多个监控项目,本申请实施例对监控项目个数以及其具体项目内容不做限定;
步骤22,获得运行监控执行项所生成的与监控项目对应的监控数据。通过对监控执行项的运行,根据其指示的监控项目,可以生成相应的监控数据。本申请实施例的重点在于,将监控执行项植入到待监控字节码中,而其中,通过运行监控执行项所包含的字节码获得监控数据的方案可以采用现有技术的方案。
本申请实施例提供的该程序监控方法是基于本申请实施例提供的程序设置方法而提出的,因此其同样能够达到高效率地实现监控过程的技术效果。此外,该程序监控方法的另一优点在于,由于监控执行项是植入到待监控字节码中的,因此避免了现有技术在应用系统中添加独立于待监控字节码之外的监控模块而可能导致应用系统不稳定的问题。
在本申请实施例中,为了尽可能减小监控给应用系统带来的影响,在执行监控后,可以将获得的监控数据存储在应用系统的内存中,并利用预先指定的线程从内存中读取监控数据,然后根据应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识,从而将读取到的监控数据发送给确定的数据处理服务器标识指示的数据处理服务器,指示该数据处理服务器根据监控数据生成监控报表。
之所以要将读取到的监控数据发送给相应的数据处理服务器而不是任意数据处理服务器,是考虑到为了保持数据处理服务器的负荷均衡,避免由于数据处理服务器的负荷不平衡而导致的不稳定问题。
以下结合实际,对本申请实施例提供的上述方案进行介绍。
在实际应用中,基于本申请实施例提供的方案所构造的一种监控系统示意图如图3所示,下文将对该监控系统的各组成部分做详细介绍。图中的数字41~46用于标示本申请实施例提供的方案在该监控系统中的具体实现步骤41~46,下文也将一并对其进行详细介绍。
首先,对图3中各组成部分的说明如下:
1)监控中心:该监控中心由监控控制端、监控控制服务器和数据处理服务器集群组成,监控中心与Java应用系统之间相互独立,是监控系统主要构成部分。
2)agent:即Java应用系统的监控代理器,其负责接收监控控制指令,并对监控数据进行收集与发送。
3)监控控制服务器:其与agent保持网络连接,负责生成和发送监控脚本,控制agent的行为,并把agent收集到的监控数据传输给数据处理服务器。监控控制服务器是整个监控系统的控制枢纽。
4)数据处理服务器集群:由一组数据处理服务器组成,数据处理服务器负责接收监控控制服务器传输来的监控数据,并按照预定规则生成实时监控数据报表。
5)监控控制端:用于为监控人员提供发起监控行为和查看监控数据的接口(或界面)。
基于上述监控系统,本申请实施例提供的上述方案的具体实现过程如图4a所示,包括以下步骤:
步骤41,生成监控脚本;
监控脚本是一段被植入到待监控的Java应用程序中的Java字节码,其在运行待监控Java应用程序的时候被运行,实现的功能是对待监控Java应用程序所包含的待监控字节码进行监控。一般地,监控脚本由两个部分组成,第一部分是待监控字节码识别规则(为了便于描述,以下将待监控字节码识别规则简称为识别规则),识别规则的作用在于从待监控Java应用程序中直接或间接地指定监控脚本中包含的字节码的植入位置,或指定启动监控待监控字节码的时机;第二部分为用于指示完成监控功能的具体逻辑的监控执行项。具体地,通过对监控脚本的编译,监控执行项可以被设置为用于指示在每次执行监控脚本后,输出运行待监控字节码所耗时长;或者也可以被设置为用于指示在每次执行监控脚本后,输出整个待监控Java应用程序所对应的Java应用系统内存消耗量;或者也可以被设置为用于指示在每次执行监控脚本后,输出整个待监控Java应用程序所对应的异常情况的日志信息等等。监控执行项所指示的完成监控功能的具体逻辑可以视实际情况进行设置,本申请实施例对此不做限定。
需要具体说明的是,在本申请实施例中,上述识别规则可以分为静态字节码位置识别规则和动态事件识别规则两类。其中,静态字节码位置识别规则的示例如下表1所示:
表1:
通过如上表1所示的静态字节码位置识别规则,能够实现从待监控Java应用程序中指定监控脚本中包含的字节码的植入位置。比如,当识别规则类型为位置规则时,其相应识别规则示例中的字节码就指示了将对“Java应用系统的java.awt.Component类的init方法的第10行”进行监控。一般地,识别规则所直接指示的被监控的字节码行数可以作为监控脚本中包含的字节码的植入位置。而针对上述方法名规则,其直接指示的是“Java应用系统的java.awt.Component类的init方法会被监控”,其间接指示的就是“Java应用系统的java.awt.Component类的init方法”所对应的字节码所在位置即为监控脚本中包含的字节码的植入位置。
动态事件识别规则的示例如下表2所示:
表2:
通过如上表2所示的动态事件识别规则,能够实现确定监控脚本的运行时机,当然,动态事件识别规则也可以间接指定监控脚本中包含的字节码的植入位置。比如,当监控脚本中包含的是动态事件识别规则而非静态字节码位置识别规则时,根据预先约定,可以将Java应用程序中的某位置默认为监控脚本的植入位置。一般地,该位置可以是使得监控脚本的字节码能被较早运行到的位置,比如Java应用程序的开端位置。
设计识别规则的目的在于根据识别规则就能方便地定位到被监控点(即待监控Java应用程序中需要监控的字节码位置),实现在真正需要监控的地方执行监控。比如,针对表1最后一行所示的识别规则,当Java应用程序运行到包含该识别规则的监控脚本时,就能够通过解析该识别规则所对应的表1最后一行最后一列这样的字节码,确定出待监控字节码为“Java应用系统的java.awt.Component类的init方法的第10行”。在确定出待监控字节码后,进一步通过运行监控脚本中包含的监控执行项,就能获取与“Java应用系统的java.awt.Component类的init方法的第10行”对应的监控数据,并且通过运行监控执行项,还可以进一步执行输出获取到的该监控数据等操作。
以下对监控执行项进行详细说明。
针对待监控字节码执行的监控操作是通过运行监控脚本中的监控执行项来完成的。监控执行项是基于Java字节码编写的,其会被植入到根据上述识别规则所识别出的被监控点处。当Java应用系统运行被监控点所对应的字节码时,这段基于Java字节码编写的监控执行项也会被运行,以完成对被监控点的监控功能。在本申请实施例提供的方案中,一段基于Java字节码编写而成的完整监控脚本的组成如下表3所示:
表3:
表3所示的该段监控脚本所完成的功能是:监视java.awt.Component的init方法的执行过程,获取执行该init方法所耗时长的信息,并将每次获取到的执行init方法所耗时长的信息进行输出。
步骤42,将生成的监控脚本传输至agent;
监控控制服务器接收到监控控制端输入的监控脚本后,会自动地把监控脚本编译成Java字节码,并基于预定的网络传输协议通过网络Socket传输到部署在Java应用系统端的agent。本监控体系预定的网络传输协议的组成结构如下表4所示:
表4:
在上表4中,消息类型用于指示此次传输的消息的类型,消息类型可分为有命令消息类型和监控脚本消息类型。消息体长度用于指示本次传输的消息体的消息体长度,接收端根据消息体长度可以判断接收到的消息的完整性。MD5签名摘要是由密钥和消息体生成的,接收端可以根据该MD5签名摘要判断消息来源的合法性。
监控控制服务器基于如表4所示的网络协议,把监控脚本转化成字节流后,通过网络Socket传输到Java应用系统端的agent。
步骤43,替换Java应用系统的Java字节码;
部署在Java应用系统端的agent是基于JVM TI实现的,它能在预设的网络端口上侦听网络请求,并基于Java Instrumentation提供的特性动态更改Java应用系统已加载的Java字节码。本申请实施例中,agent接收到监控控制服务器传输的承载有监控脚本部署指令后,基于预定的网络协议,从该指令中解码出监控脚本,并根据监控脚本中的识别规则,从Java应用系统中确定待监控字节码;然后,通过将监控脚本中的监控执行项植入到待监控字节码中,生成带有监控功能的新字节码;最后,基于Java Instrumentation用生成的该新字节码替换待监控字节码。根据上述过程,实现了动态地在Java应用系统中添加监控脚本的操作。进一步地,agent还可以通过网络Socket回复监控控制服务器一个用于指示监控脚本部署成功的通知消息。以上所述流程可进一步参考如图4b所示的时序示意图。
基于执行上述步骤41~43所生成的包含监控脚本的Java应用系统,本申请实施例中通过继续执行下述步骤44~46,即能实现对监控数据的获取与呈现。
步骤44,Java应用系统通过在运行待监控字节码的同时运行相应的监控执行项,生成相应的监控数据,并将监控数据承载在监控结果消息中通过agent传输至监控控制服务器;
Java应用系统中的Java字节码被替换为包含监控执行项的新的Java字节码后就附带了监控功能。当该新的Java字节码在Java应用系统中被运行时,该新的Java字节码中包含的监控执行项也将被运行。在本申请实施例中,为了能尽量地减小监控给Java应用系统带来的影响,在每次执行完毕监控执行项后,可以把获得的监控数据存储到内存队列里,后续由独立的线程从内存队列里取出监控数据并通过网络Socket传输给监控控制服务器。
本申请实施例中,传输监控数据时也是基于该监控系统所使用的网络传输协议,数据包分为消息头和消息体。消息头描述了消息类型、消息体长度和MD5签名摘要。用于传输监控数据的该消息的消息体具体描述了监控数据。
步骤45,实时处理监控数据并生成监控报表;
监控控制服务器接收到agent传输过来的承载有监控数据的上述监控结果消息后,基于网络传输协议从该消息中解析出监控数据,并根据预先设置的监控数据所属Java应用系统与数据处理服务器的对应关系,将解析出的监控数据路由给相应的数据处理服务器,由该数据处理服务器来完成监控数据处理和监控报表生成。本申请实施例提供的方案力图实现对Java应用系统进行实时的、最细粒度的监控,而为达到这样的目的,就需要存储并高速处理大量监控数据。在这样的需求下,可以考虑通过横向扩展数据处理服务器集群来提高存储和处理能力。具体地,在本申请实施例中,监控控制服务器可以不执行对监控数据的存储和处理操作,而是把这些操作均衡地移交给数据处理服务器集群来完成。这样,数据处理服务器所需完成的任务就是实时接收监控控制服务器所传输的监控数据,并针对接收到的监控数据完成相应的计算和过滤后,生成监控报表。
步骤46,监控控制端展现各种维度的监控数据。
监控人员需要查看监控数据时,可以通过监控控制端向监控控制服务器发出监控数据报表查看指令,监控控制服务器在接收到该指令后,从数据处理服务器集群中查找相应的监控数据报表,并将查找到的报表返回给监控控制端。
对应于本申请实施例提供的程序设置方法,本申请实施例还提供一种程序设置装置,该装置的具体结构示意图如图5所示,包括以下功能单元:
监控脚本解析单元51,用于从监控脚本中解析出监控执行项和待监控字节码识别规则,其中,监控执行项包含指示针对待监控字节码的监控项目的信息;
字节码确定单元52,用于根据监控脚本解析单元51解析得到的待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码;
植入单元53,用于执行将监控脚本解析单元52解析得到的监控执行项植入字节码确定单元52确定的待监控字节码的操作。
在一个较佳的实施例中,待监控字节码识别规则可以为用于指示待监控字节码标识的静态代码位置识别规则;此时,上述字节码确定单元52具体可以用于:从待监控应用程序包含的字节码中,确定与静态代码位置识别规则所指示的待监控对象标识对应的字节码。
在另一个较佳的实施例中,待监控字节码识别规则可以为用于指示启动监控待监控字节码的时机的动态事件识别规则;此时,上述字节码确定单元52具体可以划分为:字节码位置确定模块,用于从预先设置的启动监控待监控字节码的时机与字节码位置的对应关系中,确定与监控脚本解析单元解析出的动态事件识别规则所指示的所述时机对应的字节码位置;字节码确定模块,用于从待监控应用程序包含的字节码中,确定位于字节码位置确定模块确定的字节码位置处的字节码。
基于如图5所示的该程序设置装置,本申请实施例还提供一种程序监控装置,该装置的具体结构示意图如图6所示,包括以下功能单元:
监控执行项运行单元61,用于在运行应用系统中的待监控字节码时,执行运行植入待监控字节码中的监控执行项的操作,其中,监控执行项包含指示针对所述待监控字节码的监控项目的信息;
监控数据获得单元62,用于获得通过监控执行项运行单元61运行监控执行项所生成的与监控项目对应的监控数据。
在一个较佳的实施例中,如图6所示的装置还可以进一步包括:
存储单元,用于将监控数据获得单元62获得的监控数据存储在应用系统的内存;读取单元,用于利用预先指定的线程,从应用系统的内存中读取存储单元存储的监控数据;服务器标识确定单元,用于根据应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识;指示单元,用于将读取单元读取到的监控数据发送给服务器标识确定单元确定的数据处理服务器标识指示的数据处理服务器,指示该数据处理服务器根据监控数据生成监控报表。
本申请实施例还提供一种程序设置系统,该系统的具体结构示意图如图7所示,包括监控控制端71、监控控制服务器72、监控代理器73和应用系统74,其中各部分的功能如下:
监控控制端71,用于接收用户输入的监控脚本,并将监控脚本发送给监控控制服务器72;
监控控制服务器72,用于将监控控制服务器71发送来的监控脚本编译成监控代理器能识别的格式后发送给监控代理器73;
监控代理器73,用于从监控控制服务器72发送来的监控脚本中解析出监控执行项和待监控字节码识别规则,并根据待监控字节码识别规则,从应用系统74上运行的待监控应用程序包含的字节码中确定待监控字节码,以及执行将监控执行项植入确定的待监控字节码的操作,其中,监控执行项包含指示针对待监控字节码的监控项目的信息。
此外,本申请实施例还提供一种程序监控系统,该系统与上述程序设置系统类似,也是包括监控控制端、监控控制服务器、监控代理器和应用系统。各部分的功能如下:
应用系统,用于在运行应用系统中的待监控字节码时,执行运行植入待监控字节码中的监控执行项的操作,并获得运行监控执行项所生成的与监控项目对应的监控数据,其中,监控执行项包含指示针对待监控字节码的监控项目的信息;
监控代理器,用于获取应用系统获得的监控数据,并将监控数据发送给监控控制服务器;
监控控制服务器,用于根据应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识,并将监控代理器发送来的监控数据发送给确定的数据处理服务器标识指示的数据处理服务器;
数据处理服务器,用于根据监控控制服务器发送来的监控数据生成监控报表。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (12)
1.一种程序设置方法,其特征在于,包括:
获得监控脚本,并从所述监控脚本中解析出监控执行项和待监控字节码识别规则,其中所述监控执行项包含指示针对待监控字节码的监控项目的信息;
根据所述待监控字节码识别规则,从应用系统上运行的待监控应用程序包含的字节码中确定待监控字节码;
执行将所述监控执行项植入确定的所述待监控字节码的操作,生成带有监控功能的新字节码,该生成的该新字节码用于替换待监控字节码。
2.如权利要求1所述的方法,其特征在于,所述待监控字节码识别规则为用于指示待监控字节码标识的静态代码位置识别规则;以及
根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码具体包括:
从待监控应用程序包含的字节码中,确定与所述静态代码位置识别规则所指示的待监控对象标识对应的字节码。
3.如权利要求1所述的方法,其特征在于,所述待监控字节码识别规则为用于指示启动监控待监控字节码的时机的动态事件识别规则;以及
根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码具体包括:
从预先设置的启动监控待监控字节码的时机与字节码位置的对应关系中,确定与解析出的动态事件识别规则所指示的所述时机对应的字节码位置;以及
从待监控应用程序包含的字节码中确定位于确定的所述字节码位置处的字节码。
4.基于如权利要求1所述的一种程序设置方法的一种程序监控方法,其特征在于,包括:
在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;以及
获得运行所述监控执行项所生成的与所述监控项目对应的监控数据。
5.如权利要求4所述的方法,其特征在于,还包括:
将获得的所述监控数据存储在所述应用系统的内存;并
利用预先指定的线程,从所述内存中读取所述监控数据;
根据所述应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识;并
将读取到的所述监控数据发送给确定的数据处理服务器标识指示的数据处理服务器,指示该数据处理服务器根据所述监控数据生成监控报表。
6.一种程序设置装置,其特征在于,包括:
监控脚本解析单元,用于从监控脚本中解析出监控执行项和待监控字节码识别规则,其中,所述监控执行项包含指示针对待监控字节码的监控项目的信息;
字节码确定单元,用于根据监控脚本解析单元解析得到的待监控字节码识别规则,从应用系统上运行的待监控应用程序包含的字节码中确定待监控字节码;
植入单元,用于执行将监控脚本解析单元解析得到的监控执行项植入字节码确定单元确定的待监控字节码的操作,生成带有监控功能的新字节码,该生成的该新字节码用于替换待监控字节码。
7.如权利要求6所述的装置,其特征在于,所述待监控字节码识别规则为用于指示待监控字节码标识的静态代码位置识别规则;以及
所述字节码确定单元具体用于:从待监控应用程序包含的字节码中,确定与所述静态代码位置识别规则所指示的待监控对象标识对应的字节码。
8.如权利要求6所述的装置,其特征在于,所述待监控字节码识别规则为用于指示启动监控待监控字节码的时机的动态事件识别规则;以及
所述字节码确定单元具体包括:
字节码位置确定模块,用于从预先设置的启动监控待监控字节码的时机与字节码位置的对应关系中,确定与监控脚本解析单元解析出的动态事件识别规则所指示的所述时机对应的字节码位置;
字节码确定模块,用于从待监控应用程序包含的字节码中,确定位于字节码位置确定模块确定的所述字节码位置处的字节码。
9.基于如权利要求6所述的一种程序设置装置的一种程序监控装置,其特征在于,包括:
监控执行项运行单元,用于在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;
监控数据获得单元,用于获得通过监控执行项运行单元运行所述监控执行项所生成的与所述监控项目对应的监控数据。
10.如权利要求9所述的程序监控装置,其特征在于,还包括:
存储单元,用于将监控数据获得单元获得的所述监控数据存储在所述应用系统的内存;
读取单元,用于利用预先指定的线程,从所述内存中读取存储单元存储的所述监控数据;
服务器标识确定单元,用于根据所述应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识;
指示单元,用于将读取单元读取到的监控数据发送给服务器标识确定单元确定的数据处理服务器标识指示的数据处理服务器,指示该数据处理服务器根据所述监控数据生成监控报表。
11.一种程序设置系统,其特征在于,包括监控控制端、监控控制服务器、监控代理器和应用系统,其中:
监控控制端,用于接收用户输入的监控脚本,并将所述监控脚本发送给监控控制服务器;
监控控制服务器,用于将监控控制服务器发送来的所述监控脚本编译成监控代理器能识别的格式后发送给监控代理器;
监控代理器,用于从监控控制服务器发送来的监控脚本中解析出监控执行项和待监控字节码识别规则,并根据所述待监控字节码识别规则,从应用系统上运行的待监控应用程序包含的字节码中确定待监控字节码,以及执行将所述监控执行项植入确定的待监控字节码的操作,生成带有监控功能的新字节码,该生成的该新字节码用于替换待监控字节码,其中,所述监控执行项包含指示针对待监控字节码的监控项目的信息。
12.基于权利要求11所述的程序设置系统的一种程序监控系统,其特征在于,包括监控控制端、监控控制服务器、监控代理器和应用系统,其中:
应用系统,用于在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,并获得运行所述监控执行项所生成的与所述监控项目对应的监控数据,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;
监控代理器,用于获取应用系统获得的所述监控数据,并将所述监控数据发送给监控控制服务器;
监控控制服务器,用于根据所述应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识,并将监控代理器发送来的所述监控数据发送给确定的数据处理服务器标识指示的数据处理服务器;
数据处理服务器,用于根据监控控制服务器发送来的所述监控数据生成监控报表。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110028307.9A CN102622289B (zh) | 2011-01-26 | 2011-01-26 | 程序设置方法、程序监控方法与装置、系统 |
HK12108974.9A HK1168918A1 (zh) | 2011-01-26 | 2012-09-13 | 程序設置方法、程序監控方法與裝置、系統 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110028307.9A CN102622289B (zh) | 2011-01-26 | 2011-01-26 | 程序设置方法、程序监控方法与装置、系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102622289A CN102622289A (zh) | 2012-08-01 |
CN102622289B true CN102622289B (zh) | 2015-03-18 |
Family
ID=46562216
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110028307.9A Active CN102622289B (zh) | 2011-01-26 | 2011-01-26 | 程序设置方法、程序监控方法与装置、系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102622289B (zh) |
HK (1) | HK1168918A1 (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103838657A (zh) * | 2012-11-27 | 2014-06-04 | 联想(北京)有限公司 | 信息处理方法、装置及电子设备 |
CN104683181B (zh) * | 2015-02-12 | 2019-02-15 | 北京蓝海讯通科技有限公司 | 一种性能监控方法、设备和系统 |
CN104683179A (zh) * | 2015-02-12 | 2015-06-03 | 北京蓝海讯通科技有限公司 | 一种对对象的执行性能进行监控的方法、装置及系统 |
CN104809045B (zh) * | 2015-04-27 | 2021-01-05 | 腾讯科技(深圳)有限公司 | 监控脚本的运行方法及装置 |
US10055208B2 (en) * | 2015-08-09 | 2018-08-21 | Oracle International Corporation | Extending a virtual machine instruction set architecture |
CN107168844B (zh) * | 2016-03-07 | 2020-09-11 | 中国移动通信集团河南有限公司 | 一种性能监控的方法及装置 |
CN106713281A (zh) * | 2016-11-30 | 2017-05-24 | 国网北京市电力公司 | 监控系统 |
CN109684027B (zh) * | 2017-10-18 | 2020-11-24 | 北京京东尚科信息技术有限公司 | 动态跟踪Java虚拟机运行的方法和装置 |
CN109918305A (zh) * | 2019-03-07 | 2019-06-21 | 北京奇艺世纪科技有限公司 | 一种线上服务监控系统及方法 |
CN111026601A (zh) * | 2019-09-23 | 2020-04-17 | 拉扎斯网络科技(上海)有限公司 | Java应用系统的监控方法、装置、电子设备及存储介质 |
CN110909345B (zh) * | 2019-12-02 | 2022-03-22 | 中国银行股份有限公司 | 一种Java系统开源软件防篡改方法及系统 |
CN111162949A (zh) * | 2019-12-31 | 2020-05-15 | 国网山西省电力公司信息通信分公司 | 一种基于Java字节码嵌入技术的接口监测方法 |
CN112579571B (zh) * | 2020-12-17 | 2024-03-19 | 招商局金融科技有限公司 | 监控数据配置、数据监控方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101226497A (zh) * | 2007-12-10 | 2008-07-23 | 金蝶软件(中国)有限公司 | 应用程序监控系统和监控方法 |
CN101853205A (zh) * | 2010-06-23 | 2010-10-06 | 山东中创软件商用中间件股份有限公司 | 一种监控程序运行的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
BR0309296A (pt) * | 2002-04-19 | 2007-02-21 | Computer Ass Think Inc | sistema e método para a monitoração de uma aplicação de computador |
-
2011
- 2011-01-26 CN CN201110028307.9A patent/CN102622289B/zh active Active
-
2012
- 2012-09-13 HK HK12108974.9A patent/HK1168918A1/zh unknown
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101226497A (zh) * | 2007-12-10 | 2008-07-23 | 金蝶软件(中国)有限公司 | 应用程序监控系统和监控方法 |
CN101853205A (zh) * | 2010-06-23 | 2010-10-06 | 山东中创软件商用中间件股份有限公司 | 一种监控程序运行的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
HK1168918A1 (zh) | 2013-01-11 |
CN102622289A (zh) | 2012-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102622289B (zh) | 程序设置方法、程序监控方法与装置、系统 | |
CN102521137B (zh) | 多核架构中的调试 | |
CN102999314B (zh) | 立即延迟跟踪器工具 | |
CN109559583B (zh) | 故障模拟方法及其装置 | |
JP2015528612A (ja) | 分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム | |
CN103544095B (zh) | 服务器程序的监控方法及其系统 | |
CN108566290A (zh) | 服务配置管理方法、系统、存储介质和服务器 | |
CN105793860A (zh) | 反调试方法 | |
CN112035191B (zh) | 基于微服务的apm全链路监控系统及方法 | |
CN102016298A (zh) | 风力涡轮机配置管理系统以及用于其的中央计算机系统 | |
CN106155812A (zh) | 一种对虚拟主机的资源管理的方法、装置、系统及电子设备 | |
US9519537B2 (en) | Apparatus, system and method for application log data processing | |
CN103034578A (zh) | 一种应用数据监控方法和装置 | |
CN103927305B (zh) | 一种对内存溢出进行控制的方法和设备 | |
CN106161524A (zh) | 一种基于分布式资源节点的资源下载方法及装置 | |
CN103109276A (zh) | 系统测试方法 | |
CN104919427A (zh) | 动态组件性能监视 | |
CN113010392B (zh) | 大数据平台的测试方法、装置、设备、存储介质和系统 | |
CN110290190A (zh) | 一种采集数据的方法、被监控设备及监控服务器 | |
CN112737800A (zh) | 服务节点故障定位方法、调用链生成方法及服务器 | |
CN107168844B (zh) | 一种性能监控的方法及装置 | |
CN104956331A (zh) | 管理计算机系统的管理系统及其管理方法 | |
CN106126419A (zh) | 一种应用程序的调试方法及装置 | |
CN114328217A (zh) | 应用的测试方法、装置、设备、介质及计算机程序产品 | |
CN112269746A (zh) | 自动化测试方法及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1168918 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1168918 Country of ref document: HK |