CN103761474B - 一种用于监控方法执行时间的监控方法和装置 - Google Patents

一种用于监控方法执行时间的监控方法和装置 Download PDF

Info

Publication number
CN103761474B
CN103761474B CN201410033761.7A CN201410033761A CN103761474B CN 103761474 B CN103761474 B CN 103761474B CN 201410033761 A CN201410033761 A CN 201410033761A CN 103761474 B CN103761474 B CN 103761474B
Authority
CN
China
Prior art keywords
monitored
monitoring
stack
time
information
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
Application number
CN201410033761.7A
Other languages
English (en)
Other versions
CN103761474A (zh
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.)
Xiamen Jianfu Chain Management Co.,Ltd.
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information 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 Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201410033761.7A priority Critical patent/CN103761474B/zh
Publication of CN103761474A publication Critical patent/CN103761474A/zh
Application granted granted Critical
Publication of CN103761474B publication Critical patent/CN103761474B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents

Abstract

本发明实施例公开了一种用于监控方法执行时间的监控方法和装置。该方法包括:预先生成用于执行监控操作的监控对象,在被监控方法初始化或者首次被调用时,将用于调用所述监控对象的调用接口加入到所述被监控方法中;所述监控对象记录所述被监控方法被调用的时间作为开始时间,将所述开始时间和所述被监控方法的信息压入监控栈中;所述监控对象记录所述被监控方法执行完毕的时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈;根据所述结束时间和所述开始时间确定所述被监控方法的执行时间。应用本发明实施例能够避免对被监控方法本身造成污染,降低被监控方法上线的出错概率。

Description

一种用于监控方法执行时间的监控方法和装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种用于监控方法执行时间的监控方法和装置。
背景技术
在计算机领域中,常常需要监控计算机中方法的执行时间,以便于优化实现所述方法的代码、加快方法运行效率、提高系统性能。
图1是目前用于监控方法执行时间的监控方法流程图。
如图1所示,该流程包括:
步骤101,预先在被监控方法的入口处和出口处手动嵌入监控代码。
步骤102,当运行被监控方法时,所述监控代码记录当前系统时间,并根据记录的当前系统时间计算被监控方法的执行时间。
具体地,被监控方法入口处的监控代码记录当前系统时间,作为被监控方法的开始时间,被监控方法出口处的监控代码记录当前系统时间,作为被监控方法的结束时间,并将所述结束时间减去所述开始时间所得的时长确定为被监控方法的执行时间。
由图1所示方法可见,目前在监控方法执行时间时,需要预先在被监控方法入口处和出口处手动嵌入监控代码,这种预先手动嵌入监控代码的方法将对被监控方法本身造成污染,当被监控方法上线时,还需要将已经嵌入的监控代码删除,这种手动加入监控代码和手动删除监控代码的方式也增加了出错概率。
另外,目前的监控方法只能针对单个方法的执行时间进行监控,无法对方法执行链上的多个被监控方法依次进行监控,记录其各自的执行时间。
再者,目前的监控方法只能在采用单线程运行被监控方法时才能够监控到被监控方法的执行时间,如果是采用多线程方式运行被监控方法,由于多线程中的每个线程都能够对用于存储监控代码所记录的系统时间的变量进行操作,造成操作混乱,因此,在采用多线程方式运行被监控方法时无法监控到被监控方法的执行时间。
发明内容
有鉴于此,本发明提供了一种用于监控方法执行时间的监控方法和装置,能够避免对被监控方法本身造成污染,降低被监控方法上线的出错概率。
一种用于监控方法执行时间的监控方法,该方法包括:
预先生成用于执行监控操作的监控对象,在被监控方法初始化或者首次被调用时,将用于调用所述监控对象的调用接口加入到所述被监控方法中;
所述监控对象记录所述被监控方法被调用的时间作为开始时间,将所述开始时间和所述被监控方法的信息压入监控栈中;
所述监控对象记录所述被监控方法执行完毕的时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈;
根据所述结束时间和所述开始时间确定所述被监控方法的执行时间。
一种用于监控方法执行时间的监控装置,该装置包括监控对象动态添加模块和监控栈;
所述监控对象动态添加模块,用于在被监控方法初始化或者首次被调用时,将用于调用监控对象的调用接口加入到所述被监控方法中;
其中,所述监控对象是预先生成的用于执行监控操作的对象,所述监控对象记录所述被监控方法被调用的时间作为开始时间,将所述开始时间和所述被监控方法的信息压入所述监控栈中,记录所述被监控方法执行完毕的时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈;
所述监控对象根据所述结束时间和所述开始时间确定所述被监控方法的执行时间。
由上述技术方案可见,本发明实施例预先生成用于执行监控操作的监控对象,但是,是在需要监控方法执行时间时,动态地将用于调用监控对象的调用接口加入到所述被监控方法中,具体地,在被监控方法初始化或者首次被调用时,将用于调用所述监控对象的调用接口加入到所述被监控方法中,如果不需要监控方法的执行时间,例如,在方法正式上线时,则不会动态地加入监控对象的调用接口,因此,与现有技术中需要预先在被监控方法的入口处和出口处手动嵌入监控代码相比,本发明实施例能够避免对被监控方法本身造成污染,降低监控方法上线的出错概率。
而且,本发明实施例中,动态加入的监控对象在所述被监控方法被调用时,将记录到的开始时间和所述被监控方法的信息压入监控栈中,在所述被监控方法执行完毕时,记录结束时间,并且将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈,可见,被监控方法的执行开始时间和被监控方法的信息进入和弹出监控栈的顺序和被监控方法的执行顺序是一致的,当需要监控方法执行链中一系列方法的执行时间时,由于这一系列方法中每个被监控方法的执行开始时间和被监控方法自身的信息进入和弹出监控栈的顺序,与该一系列方法的执行顺序是一致的,即监控栈的数据结构与方法执行栈的数据结构是一致的,因此,可以根据监控栈中各个开始时间和被监控方法自身的信息弹出的顺序以及在被监控方法执行完毕时记录的结束时间,得到该一系列方法中每个被监控方法的执行时间信息,从而实现对方法执行链上的多个被监控方法依次进行监控,记录其各自的执行时间。
附图说明
图1是目前用于监控方法执行时间的监控方法流程图。
图2是本发明实施例提供的用于监控方法执行时间的监控方法流程图。
图3是本发明实施例提供的监控对象对被监控方法的执行时间进行监控的流程图。
图4是本发明实施例提供的在Spring容器场景下透明且动态地为被监控方法加入监控对象的流程图。
图5是本发明实施例提供的用于监控方法执行时间的监控装置结构示意图。
具体实施方式
图2是本发明实施例提供的用于监控方法执行时间的监控方法流程图。
如图2所示,该流程包括:
步骤201,在被监控方法初始化或者首次被调用时,将用于调用监控对象的调用接口加入到所述被监控方法中,其中,所述监控对象是预先生成的用于执行监控操作的对象。
步骤202,所述监控对象记录所述被监控方法被调用的时间作为开始时间,将所述开始时间和所述被监控方法的信息压入监控栈中。
步骤203,所述监控对象记录所述被监控方法执行完毕的时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈。
步骤204,根据所述结束时间和所述开始时间确定所述被监控方法的执行时间。
由图2可见,本发明实施例是在需要监控方法执行时间时,动态地将用于执行监控操作的监控对象的调用接口加入到被监控方法中,如果不需要监控方法的执行时间,例如,在方法正式上线时,则不会动态地将所述监控对象的调用接口加入到方法中,因此,能够避免对被监控方法本身造成污染,降低监控方法上线的出错概率。
本发明实施例所涉及的栈,是一种计算机系统中的数据结构,特点是先进入的元素后弹出,简称先入后出。例如,先调用的方法压入方法栈中(第一次压栈),然后执行该方法,当该方法中再调用其他方法时,将新调用的方法压到栈中(第二次压栈),然后执行新调用的方法,依此类推,当每次有新方法被调用时都将新方法压到栈顶(第N次压栈),直到栈顶的方法退出时,弹出栈顶元素(第一次出栈,对应于最后一次压栈的方法,即先进后出的顺序),继续执行新的栈顶元素,直至栈中的元素全部弹出为止。
可见,本发明实施例中,当需要监控方法执行链中一系列方法的执行时间时,由于这一系列方法中每个方法的执行开始时间进入和弹出监控栈的顺序,与该一系列方法的执行顺序是一致的,即监控栈的数据结构与方法执行栈的数据结构是一致的,因此,可以根据监控栈中各个开始时间弹出的顺序以及在被监控方法执行完毕时记录的结束时间,得到该一系列方法中每个被监控方法的执行时间信息,从而实现对方法执行链上的多个被监控方法依次进行监控,记录其各自的执行时间。
本发明实施例中,可以预先配置监控信息,根据预先配置的所述监控信息确定是否需要对方法进行监控,进而确定是否需要动态地将用于调用监控对象的调用接口加入到方法中。具体地:
预先配置监控信息,所述监控信息包括被监控的类的标识(ID)信息、以及该被监控的类中被监控方法的身份信息,例如,被监控的类在容器中的ID信息、被监控的类中被监控方法的名称信息等。根据预先配置的所述监控信息,确定出被监控的类和被监控的类中的被监控方法,在被监控的类初始化或者首次被调用时,通过为被监控的类中的被监控方法加入用于调用所述监控对象的调用接口生成所述被监控的类的代理类。可见,通过利用被监控的类的所述代理类来取代所述被监控的类,可以实现透明且动态地为被监控的类中的被监控方法加入监控对象。
可见,本发明实施例可以通过修改预先配置的监控信息灵活地实现对方法执行时间的监控,而且,不会对被监控方法本身的代码产生污染,比如,在需要监控某一方法的执行时间时,将该方法所属的类和该方法在该类中的身份信息写入到所述监控信息中,从而实现监控,而当方法正式上线时,一般不会配置所述监控信息,因此,也不会为正式上线的方法加入监控对象的调用接口。
至于在何时为被监控的类生成代理类,这依据应用场景的不同而不同,例如,在应用于Spring容器场景下时,在Spring容器初始化阶段为被监控的类生成代理类,具体地:
在Spring容器初始化时,拦截初始化请求,将所述初始化请求与预先配置的所述监控信息进行对比,如果当前初始化的类是被监控的类,则通过为被监控的类中的被监控方法加入用于调用所述监控对象的调用接口生成所述被监控的类的代理类,将所述代理类返回给所述Spring容器。
可见,在应用于Spring容器的场景下时,本发明实施例在Spring容器初始化时为被监控的类生成代理类,其中,在该代理类中,监控对象的调用接口被加入到被监控方法中,然后向Spring容器返回所述代理类,从而实现了动态且透明地为被监控方法加入了监控对象的调用接口,进而实现为被监控方法监控执行时间。
关于预先生成的监控对象所需要执行的具体监控动作,以及将监控对象的调用接口加入到被监控方法的哪些位置,本发明实施例提出:
用于执行监控操作的监控对象包括第一监控方法和第二监控方法,将第一监控方法的调用接口加入到被监控方法的入口处,将第二监控方法的调用接口加入到被监控方法的出口处;其中,所述第一监控方法记录当前时间作为开始时间,将所述开始时间和所述被监控方法的信息压入监控栈中,所述第二监控方法记录当前时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈。
为了在采用多线程方式运行被监控方法时,仍能监控到被监控方法在各个线程上的执行时间,本发明实施例还提出:
所述第一监控方法从当前线程的方法执行栈获取栈顶元素信息,并记录当前时间作为开始时间,将所述栈顶元素信息和所述开始时间存储在第一存储对象中,将所述第一存储对象压入到监控栈中,所述监控栈存储在只有当前线程能够操作的变量中;所述第二监控方法从所述只有当前线程能够操作的变量中取出所述监控栈,从所述监控栈中取出栈顶元素,并记录当前时间作为结束时间。其中,当前线程的方法在被调用时被压入当前线程的方法执行栈,在执行完毕时从所述当前线程的方法执行栈中弹出。
可见,由于每个线程的监控栈存储在只有该线程自身能够操作的变量中,因此,其他线程无法对该监控栈中的信息进行操作,进而保证了监控栈是线程安全的,避免了采用多线程方式执行被监控方法时的操作混乱,因此在采用多线程方式运行被监控方法时,仍能监控到被监控方法在各个线程上的执行时间。
当需要监控方法执行链中一系列方法的执行时间时,为了能够确定出单个方法自身的执行时间与调用该单个方法的上层方法的执行时间之间的比例关系,进而寻找出方法执行性能的瓶颈所在,便于优化系统性能,本发明实施例还提出:
所述第二监控方法在从所述监控栈中取出栈顶元素时,记录当前取出的栈顶元素与所述监控栈中新的栈顶元素之间的指向关系,将所述指向关系、所述结束时间和从所述监控栈中取出的栈顶元素中存储的信息加入到有序的存储容器中,根据所述有序的存储容器中存储的所述指向关系和被监控方法的执行时间信息,确定出被监控方法的执行时间占调用该被监控方法的上层被监控方法的执行时间的比例信息。其中,所述有序的存储容器包括但不限于队列。
具体地,所述第二监控方法在将所述指向关系、所述结束时间和从所述监控栈中取出的栈顶元素中存储的信息加入到有序的存储容器中以后,判断当前线程的方法执行栈是否为空,如果为空,从所述有序的存储容器的头部开始遍历打印执行时间信息,如果不为空,返回继续执行方法执行栈中的方法。
下面结合附图,分别对本发明实施例中监控对象如何对被监控方法的执行时间进行监控、以及在Spring容器场景下如何透明且动态地为被监控方法加入监控对象进行示例性说明,具体请参见图3和图4。
图3是本发明实施例提供的监控对象对被监控方法的执行时间进行监控的流程图。
如图3所示,其中的步骤301、步骤305和步骤312是被监控方法自身的正常流程,其他步骤是在被监控方法的入口处和出口处加入的监控对象所执行的流程,具体地:
步骤301,进入被监控方法,被监控方法被压入当前线程的方法栈。
步骤302,位于被监控方法入口处的第一监控方法的调用接口调用所述第一监控方法,所述第一监控方法获取当前线程的方法栈信息。
其中,第一监控方法的调用接口通常位于方法执行的第一句,通过执行该调用接口来调用第一监控方法。
步骤303,所述第一监控方法记录当前方法的具体信息和当前时间信息,将当前时间信息确定为执行开始时间。
其中,当前方法的具体信息可以包括但不限于方法名称信息、方法所属的类的名称等,可以将当前方法的具体信息和当前时间信息记录到一个对象中,例如记录到一个Java对象中。
步骤304,所述第一监控方法将记录的信息压入监控栈中。
本步骤中,优选地,可以将所述监控栈存储在只有当前线程能够操作的变量中,从而保证监控栈的线程安全性,避免其他线程对该监控栈进行操作。
步骤305,执行被监控方法本身的内容。
步骤306,位于被监控方法出口处的第二监控方法的调用接口调用所述第二监控方法,所述第二监控方法从所述监控栈取出栈顶元素。
从所述监控栈中取出的栈顶元素包括了在步骤303中记录的当前方法的具体信息和执行开始时间信息。
步骤307,所述第二监控方法记录当前时间作为结束时间。
其中,步骤306和步骤307的顺序可调。
步骤308,所述第二监控方法将弹出的监控栈栈顶元素指向监控栈当前的栈顶元素。
步骤309,所述第二监控方法将弹出的监控栈栈顶元素、记录的所述结束时间、以及监控栈栈顶元素之间的指向关系信息放入到独立的队列中。
步骤310,所述第二监控方法判断方法栈当前是否为空,如果为空,执行步骤311,否则,执行步骤312。
步骤311,从所述队列的头部开始遍历队列,打印被监控方法的执行时间信息。
其中,被监控方法的执行时间信息包括各个被监控方法自身的执行时间,所述第二监控方法还可以根据各个被监控方法之间的指向关系信息,确定被监控方法自身的执行时间占调用该被监控方法的上层被监控方法的执行时间的比例信息,因此,被监控方法的执行时间信息还可以包括所述比例信息。
步骤312,返回方法栈继续执行其他方法。
图4是本发明实施例提供的在Spring容器场景下透明且动态地为被监控方法加入监控对象的流程图。
其中,Spring是一个轻量级的Java开发框架。它是为了解决企业应用开发的复杂性而创建的。通常企业级应用都使用Spring容器来管理应用中的Java对象,即本文中所说的Bean。
如图4所示,该流程包括:
步骤401,为Spring容器配置监控信息,所述监控信息包括需要监控的类在Spring容器中的ID信息、以及需要监控的类中被监控方法的身份信息。
其中,所述身份信通常为被监控方法的方法名称。具体可以在Spring容器的配置文件中配置所述监控信息。
步骤402,Spring容器启动。
步骤403,拦截初始化请求。
本步骤中,可以使用Spring框架的API拦截到初始化Bean的请求。
步骤404,通过与预先配置的监控信息进行比较,判断当前初始化的类是否是需要监控的类,如果是,执行步骤405,否则,执行步骤406。
步骤405,动态生成需要初始化的Bean(拦截到的Bean)的代理类,将所述代理类返回给Spring容器。
本步骤中,根据预先配置的监控信息,确定出被监控的Bean中的被监控方法,通过为被监控的Bean中的被监控方法加入用于调用监控对象的接口来生成所述被监控的Bean的代理类,即,通过对被监控的Bean需要监控的方法加入监控埋点代码来生成被监控的Bean的代理类,将加入了监控对象调用接口的Bean(即所述代理类)返回给Spring容器。
其中,可以使用CGLIB框架提供的面向切面编程(AOP)技术动态生成需要初始化的Bean(拦截到的Bean)的代理类,也可以直接通过ASM框架来实现创建代理类的功能。
其中,CGLIB是一个强大的、高性能、高质量的代码生成类库,它可以在运行期扩展Java类与实现Java接口量级的Java开发框架。AOP是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
步骤406,继续Spring容器的初始化,返回步骤403,直到整个Spring容器初始化完毕。
可见,通过图4所示的方法,Spring容器中注册的就是被本发明实施例动态加入了监控对象的代理类,但该代理类对用户来说是透明的,最终实现了透明地在被监控方法前后加入监控对象的功能。
本发明实施例适用于通过栈来实现方法执行的各种被监控方法,而对被监控方法所采用的程序语言不作特别限定,例如,采用Java编写的方法的执行是通过栈来实现的,方法进入和退出时遵循先入后出的顺序,本发明实施例也利用一个栈(即监控栈)来跟踪方法的调用情况,每产生一次方法调用时,本发明实施例也新生成一个Java对象记录开始时间并压栈,每次方法栈弹出时,本发明所用的监控栈也弹出开始时间并记录结束时间,因为Java的方法调用使用的方法栈和本发明实施例使用的监控栈的数据结构相同,所以本发明实施例可以完整地记录下每次方法调用情况。从而实现对方法调用进行监控的目的。
对于使用Spring框架开发的应用来说,如果采用本发明实施例,则在引入一个jar包后,只需要预先配置监控信息,就可以针对整个应用指定类的指定方法做方法执行时间的监控,方便快速定位执行时间较长的方法,寻找应用性能瓶颈。并且,本发明实施例对应用代码没有任何污染,不存在修改任何代码的风险。
本发明实施例还能够在多线程情况下的监控方法执行时间,实现对方法执行链中一系列方法按顺序监控其执行时间。
根据本发明实施例提供的上述监控方法,本发明实施例还提供了一种用于监控方法执行时间的监控装置,具体请参见图5。
图5是本发明实施例提供的用于监控方法执行时间的监控装置结构示意图。
如图5所示,该装置包括监控对象动态添加模块501和监控栈502。
监控对象动态添加模块501,用于在被监控方法初始化或者首次被调用时,将用于调用监控对象的调用接口加入到所述被监控方法中。
其中,所述监控对象是预先生成的用于执行监控操作的对象,所述监控对象记录所述被监控方法被调用的时间作为开始时间,将所述开始时间和所述被监控方法的信息压入所述监控栈502中,记录所述被监控方法执行完毕的时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈502。
所述监控对象根据所述结束时间和所述开始时间确定所述被监控方法的执行时间。
其中,所述用于执行监控操作的监控对象包括第一监控方法和第二监控方法;监控对象动态添加模块501,用于在被监控方法初始化或者首次被调用时,将所述第一监控方法的调用接口加入到被监控方法的入口处,将所述第二监控方法的调用接口加入到被监控方法的出口处。
所述第一监控方法记录当前时间作为开始时间,将所述开始时间和所述被监控方法的信息压入监控栈502中。
所述第二监控方法记录当前时间作为结束时间,将压入所述监控栈502的所述开始时间和所述被监控方法的信息弹出所述监控栈502。
该装置还可以包括线程安全存储模块。
所述线程安全存储模块,用于将监控栈502存储在只有当前线程能够操作的变量中。
其中,所述第一监控方法从当前线程的方法执行栈获取栈顶元素信息,并记录当前时间作为开始时间,将所述栈顶元素信息和所述开始时间存储在第一存储对象中,将所述第一存储对象压入到所述监控栈502中。
所述第二监控方法从所述只有当前线程能够操作的变量中取出所述监控栈502,从所述监控栈中取出栈顶元素,并记录当前时间作为结束时间。
其中,当前线程的方法在被调用时被压入所述方法执行栈,在执行完毕时从所述方法执行栈中弹出。
该装置还可以包括有序的存储容器。
所述有序的存储容器用于存储监控栈中元素之间的指向关系信息和被监控方法的执行时间信息,以便于确定出被监控方法的执行时间占调用该被监控方法的上层被监控方法的执行时间的比例信息;其中,所述第二监控方法在从所述监控栈中取出栈顶元素时,记录当前取出的栈顶元素与所述监控栈中新的栈顶元素之间的指向关系,将所述指向关系、所述结束时间和从所述监控栈中取出的栈顶元素中存储的信息加入到有序的存储容器中。
其中,监控对象动态添加模块501可以包括预配置模块和动态添加模块。
所述预配置模块,用于预先配置监控信息,所述监控信息包括被监控的类的标识(ID)信息、以及该被监控的类中被监控方法的身份信息。
所述动态添加模块,用于根据预先配置的所述监控信息,确定出被监控的类和被监控的类中的被监控方法,在被监控的类初始化或者首次被调用时,通过为被监控的类中的被监控方法加入用于调用所述监控对象的调用接口生成所述被监控的类的代理类。
所述动态添加模块,用于在Spring容器初始化时,拦截初始化请求,将所述初始化请求与预先配置的所述监控信息进行对比,如果当前初始化的类是被监控的类,则通过为被监控的类中的被监控方法加入用于调用所述监控对象的调用接口生成所述被监控的类的代理类,将所述代理类返回给所述Spring容器。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (13)

1.一种用于监控方法执行时间的监控方法,其特征在于,该方法包括:
预先生成用于执行监控操作的监控对象,在被监控方法初始化或者首次被调用时,将用于调用所述监控对象的调用接口加入到所述被监控方法中;
所述监控对象记录所述被监控方法被调用的时间作为开始时间,将所述开始时间和所述被监控方法的信息压入监控栈中;
所述监控对象记录所述被监控方法执行完毕的时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈;
根据所述结束时间和所述开始时间确定所述被监控方法的执行时间。
2.根据权利要求1所述的方法,其特征在于,所述用于执行监控操作的监控对象包括第一监控方法和第二监控方法,所述将用于调用所述监控对象的调用接口加入到所述被监控方法中包括:
将所述第一监控方法的调用接口加入到被监控方法的入口处,将所述第二监控方法的调用接口加入到被监控方法的出口处;
其中,所述第一监控方法记录当前时间作为开始时间,将所述开始时间和所述被监控方法的信息压入监控栈中;所述第二监控方法记录当前时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈。
3.根据权利要求2所述的方法,其特征在于,
所述第一监控方法从当前线程的方法执行栈获取栈顶元素信息,并记录当前时间作为开始时间,将所述栈顶元素信息和所述开始时间存储在第一存储对象中,将所述第一存储对象压入到监控栈中,所述监控栈存储在只有当前线程能够操作的变量中;
所述第二监控方法从所述只有当前线程能够操作的变量中取出所述监控栈,从所述监控栈中取出栈顶元素,并记录当前时间作为结束时间;
其中,当前线程的方法在被调用时被压入所述方法执行栈,在执行完毕时从所述方法执行栈中弹出。
4.根据权利要求3所述的方法,其特征在于,该方法还包括:
所述第二监控方法在从所述监控栈中取出栈顶元素时,记录当前取出的栈顶元素与所述监控栈中新的栈顶元素之间的指向关系,将所述指向关系、所述结束时间和从所述监控栈中取出的栈顶元素中存储的信息加入到有序的存储容器中;
根据所述有序的存储容器中存储的所述指向关系和被监控方法的执行时间信息,确定出被监控方法的执行时间占调用该被监控方法的上层被监控方法的执行时间的比例信息。
5.根据权利要求4所述的方法,其特征在于,
所述第二监控方法在将所述指向关系、所述结束时间和从所述监控栈中取出的栈顶元素中存储的信息加入到有序的存储容器中以后,判断当前线程的方法执行栈是否为空,如果为空,从所述有序的存储容器的头部开始遍历打印执行时间信息,如果不为空,返回继续执行方法执行栈中的方法。
6.根据权利要求1-5任一权利要求所述的方法,其特征在于,该方法还包括:
预先配置监控信息,所述监控信息包括被监控的类的标识信息、以及该被监控的类中被监控方法的身份信息;
所述在被监控方法初始化或者首次被调用时,将用于调用所述监控对象的调用接口加入到所述被监控方法中包括:
根据预先配置的所述监控信息,确定出被监控的类和被监控的类中的被监控方法,在被监控的类初始化或者首次被调用时,通过为被监控的类中的被监控方法加入用于调用所述监控对象的调用接口生成所述被监控的类的代理类。
7.根据权利要求6所述的方法,其特征在于,所述在被监控方法初始化或者首次被调用时,将用于调用所述监控对象的调用接口加入到所述被监控方法中包括:
在Spring容器初始化时,拦截初始化请求,将所述初始化请求与预先配置的所述监控信息进行对比,如果当前初始化的类是被监控的类,则通过为被监控的类中的被监控方法加入用于调用所述监控对象的调用接口生成所述被监控的类的代理类,将所述代理类返回给所述Spring容器。
8.一种用于监控方法执行时间的监控装置,其特征在于,该装置包括监控对象动态添加模块和监控栈;
所述监控对象动态添加模块,用于在被监控方法初始化或者首次被调用时,将用于调用监控对象的调用接口加入到所述被监控方法中;
其中,所述监控对象是预先生成的用于执行监控操作的对象,所述监控对象记录所述被监控方法被调用的时间作为开始时间,将所述开始时间和所述被监控方法的信息压入所述监控栈中,记录所述被监控方法执行完毕的时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈;
所述监控对象根据所述结束时间和所述开始时间确定所述被监控方法的执行时间。
9.根据权利要求8所述的监控装置,其特征在于,所述用于执行监控操作的监控对象包括第一监控方法和第二监控方法;
所述监控对象动态添加模块,用于在被监控方法初始化或者首次被调用时,将所述第一监控方法的调用接口加入到被监控方法的入口处,将所述第二监控方法的调用接口加入到被监控方法的出口处;
所述第一监控方法记录当前时间作为开始时间,将所述开始时间和所述被监控方法的信息压入监控栈中;
所述第二监控方法记录当前时间作为结束时间,将压入所述监控栈的所述开始时间和所述被监控方法的信息弹出所述监控栈。
10.根据权利要求9所述的监控装置,其特征在于,该装置还包括线程安全存储模块;
所述线程安全存储模块,用于将监控栈存储在只有当前线程能够操作的变量中;
其中,所述第一监控方法从当前线程的方法执行栈获取栈顶元素信息,并记录当前时间作为开始时间,将所述栈顶元素信息和所述开始时间存储在第一存储对象中,将所述第一存储对象压入到所述监控栈中;
所述第二监控方法从所述只有当前线程能够操作的变量中取出所述监控栈,从所述监控栈中取出栈顶元素,并记录当前时间作为结束时间;
其中,当前线程的方法在被调用时被压入所述方法执行栈,在执行完毕时从所述方法执行栈中弹出。
11.根据权利要求10所述的监控装置,其特征在于,该装置还包括有序的存储容器;
所述有序的存储容器用于存储监控栈中元素之间的指向关系信息和被监控方法的执行时间信息,以便于确定出被监控方法的执行时间占调用该被监控方法的上层被监控方法的执行时间的比例信息;
其中,所述第二监控方法在从所述监控栈中取出栈顶元素时,记录当前取出的栈顶元素与所述监控栈中新的栈顶元素之间的指向关系,将所述指向关系、所述结束时间和从所述监控栈中取出的栈顶元素中存储的信息加入到有序的存储容器中。
12.根据权利要求8-10任一权利要求所述的装置,其特征在于,所述监控对象动态添加模块包括预配置模块和动态添加模块;
所述预配置模块,用于预先配置监控信息,所述监控信息包括被监控的类的标识信息、以及该被监控的类中被监控方法的身份信息;
所述动态添加模块,用于根据预先配置的所述监控信息,确定出被监控的类和被监控的类中的被监控方法,在被监控的类初始化或者首次被调用时,通过为被监控的类中的被监控方法加入用于调用所述监控对象的调用接口生成所述被监控的类的代理类。
13.根据权利要求12所述的装置,其特征在于,
所述动态添加模块,用于在Spring容器初始化时,拦截初始化请求,将所述初始化请求与预先配置的所述监控信息进行对比,如果当前初始化的类是被监控的类,则通过为被监控的类中的被监控方法加入用于调用所述监控对象的调用接口生成所述被监控的类的代理类,将所述代理类返回给所述Spring容器。
CN201410033761.7A 2014-01-24 2014-01-24 一种用于监控方法执行时间的监控方法和装置 Active CN103761474B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410033761.7A CN103761474B (zh) 2014-01-24 2014-01-24 一种用于监控方法执行时间的监控方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410033761.7A CN103761474B (zh) 2014-01-24 2014-01-24 一种用于监控方法执行时间的监控方法和装置

Publications (2)

Publication Number Publication Date
CN103761474A CN103761474A (zh) 2014-04-30
CN103761474B true CN103761474B (zh) 2016-08-17

Family

ID=50528710

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410033761.7A Active CN103761474B (zh) 2014-01-24 2014-01-24 一种用于监控方法执行时间的监控方法和装置

Country Status (1)

Country Link
CN (1) CN103761474B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107179975A (zh) * 2016-03-09 2017-09-19 北京京东尚科信息技术有限公司 监控方法和装置
CN106953740B (zh) * 2017-01-24 2020-07-03 阿里巴巴集团控股有限公司 应用中页面访问数据的处理方法、客户端、服务器及系统
CN109783161B (zh) * 2018-12-11 2020-08-04 北京三快在线科技有限公司 iOS系统中应用程序的运行信息确定方法、装置
CN109766241A (zh) * 2018-12-29 2019-05-17 中国银行股份有限公司 系统监控方法、装置、计算机设备及计算机可读存储介质
CN109766246B (zh) * 2019-02-02 2023-04-07 北京字节跳动网络技术有限公司 用于监控应用的方法和装置
CN109992329B (zh) * 2019-03-27 2020-05-01 南京联创北斗技术应用研究院有限公司 一种基于后端切面技术的方法级性能分析方法
CN112306803A (zh) * 2020-10-29 2021-02-02 金蝶云科技有限公司 一种性能监控方法及相关设备
CN113419933B (zh) * 2021-05-26 2023-02-03 深圳开源互联网安全技术有限公司 一种监测工具的监测方法、装置及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101388062A (zh) * 2008-10-17 2009-03-18 北京锐安科技有限公司 一种基于统计方法的加壳可执行文件识别方法及系统
CN101635940A (zh) * 2009-08-27 2010-01-27 中兴通讯股份有限公司 程序片断执行时间的测量方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1256877A1 (en) * 2001-05-10 2002-11-13 Hewlett-Packard Company, A Delaware Corporation Manufacture of computer systems

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101388062A (zh) * 2008-10-17 2009-03-18 北京锐安科技有限公司 一种基于统计方法的加壳可执行文件识别方法及系统
CN101635940A (zh) * 2009-08-27 2010-01-27 中兴通讯股份有限公司 程序片断执行时间的测量方法及装置

Also Published As

Publication number Publication date
CN103761474A (zh) 2014-04-30

Similar Documents

Publication Publication Date Title
CN103761474B (zh) 一种用于监控方法执行时间的监控方法和装置
CN103793257B (zh) 一种Android程序的流式执行方法
CN111625452A (zh) 流量回放方法和系统
US10908926B2 (en) Plug-in management wrappers
US20150040140A1 (en) Consuming Ordered Streams of Messages in a Message Oriented Middleware
WO2017041649A1 (zh) 一种应用部署方法及设备
CN107491346A (zh) 一种应用的任务处理方法、装置及系统
CN108255585B (zh) Sdk异常控制及应用程序运行方法、装置及其设备
CN109033540B (zh) 一种芯片随机验证过程中的激励管理方法及系统
CN107479981B (zh) 一种基于异步调用实现同步调用的处理方法及装置
CN109542642A (zh) 一种前端任务处理的方法及装置
CN106502770B (zh) 一种基于有限状态机的hmi状态迁移方法
US8635682B2 (en) Propagating security identity information to components of a composite application
CN104714839B (zh) 一种控制进程生命期的方法和装置
CN105824695A (zh) 一种定时任务调度插件Quartz使用
JP2020529661A5 (zh)
CN103399787A (zh) 一种基于Hadoop云计算平台的MapReduce作业流式调度方法及调度系统
KR102485288B1 (ko) 차량용 제어기 및 그것의 운영체제 스케쥴링 방법
CN105335244A (zh) 用于应用程序恢复的方法
US20130247037A1 (en) Control computer and method for integrating available computing resources of physical machines
CN104360899B (zh) 一种进程管理系统及管理方法
CN110109986B (zh) 任务处理方法、系统、服务器及任务调度系统
CN106599094B (zh) 网络内容异步抓取系统和方法
US20100241842A1 (en) Method for Command Line Interface Restore Points with Support for an Atomic Sets of Commands
US20100115522A1 (en) Mechanism to control hardware multi-threaded priority by system call

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20201106

Address after: No.8-6, Putou South Road, Haicang District, Xiamen City, Fujian Province

Patentee after: Xiamen xinjianfu e-commerce Co., Ltd

Address before: 100080, Beijing, Suzhou Street, No. 20, building 2, No. 2, Haidian District

Patentee before: BEIJING JINGDONG SHANGKE INFORMATION TECHNOLOGY Co.,Ltd.

Patentee before: BEIJING JINGDONG CENTURY TRADING Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210514

Address after: 361000 No.8, Putou South Road, Haicang District, Xiamen City, Fujian Province

Patentee after: Xiamen Jianfu Chain Management Co.,Ltd.

Address before: No.8-6, Putou South Road, Haicang District, Xiamen City, Fujian Province 361022

Patentee before: Xiamen xinjianfu e-commerce Co., Ltd

TR01 Transfer of patent right