发明内容
鉴于此,本发明提供了一种性能监控方法,以力图解决或至少缓解上面存在的问题。
根据本发明的一个方面,提供了一种性能监控方法,该方法包括:在第一应用服务器处接收第一访问请求,该第一访问请求请求访问第一应用服务器中的一个或者多个第一应用;在第一应用服务器处理第一访问请求之前,在第一应用中插入第一监控对象,以便在第一应用处理第一访问请求时,执行该第一监控对象以获取第一应用的执行性能信息;当第一应用服务器中的一个或者多个第一应用在处理第一访问请求期间需要调用第二应用服务器中的一个或者多个第二应用时,根据第一访问请求生成第二访问请求,并且将第二访问请求发送到第二应用服务器,该第二访问请求包括第一访问请求的标识;将所获取的第一应用的执行性能信息连同第一访问请求的标识一起发送到性能统计服务器,以便性能统计服务器根据来自第一应用服务器的执行性能信息以及第二应用服务器的执行性能信息来对处理该第一访问请求的性能进行分析。
可选地,在根据本发明的性能监控方法中,还包括步骤:在第二应用服务器处接收第二访问请求;在第二应用服务器处理第二访问请求之前,在第二应用中插入第二监控对象,以便在第二应用处理第二访问请求时,执行第二监控对象以获取第二应用的执行性能信息,该第二监控对象包括第一访问请求的标识,以及所获取的第二应用的执行性能信息中包括第一访问请求的标识;以及将所获取的第二应用的执行性能信息连同第二访问请求的标识一起发送到性能统计服务器。
可选地,在根据本发明的性能监控方法中,在第一应用中插入第一监控对象的步骤之前还包括:根据预置的配置文件,判断是否需要在第一应用中插入第一监控对象。
可选地,在根据本发明的性能监控方法中,在第二应用中插入第二监控对象的步骤之前还包括:根据预置的配置文件,判断是否需要在第二应用中插入第二监控对象。
可选地,在根据本发明的性能监控方法中,在第一应用中插入第一监控对象的步骤还包括:检测第一访问请求中是否包括第三访问请求的标识;若是,在第一应用中插入第一监控对象,以便在第一应用处理第一访问请求时,执行第一监控对象以获取第一应用的执行性能信息,该第一监控对象包括第三访问请求的标识,以及所获取的第一应用的执行性能信息中包括第三访问请求的标识。
可选地,在根据本发明的性能监控方法中,第一访问请求、第二访问请求和第三访问请求为http访问请求,其中标识位于对应访问请求的header字段中。
可选地,在根据本发明的性能监控方法中,第一访问请求、第二访问请求和第三访问请求均包括时间戳。
可选地,在根据本发明的性能监控方法中,第一访问请求、第二访问请求和第三访问请求的标识均包括该访问请求对应的应用服务器的标识。
根据本发明的另一个方面,提供了一种性能监控装置,驻留在第一应用服务器中,该装置包括:插装对象模块,适于在其所驻留的第一应用服务器处接收第一访问请求,该第一访问请求请求访问第一应用服务器中的一个或者多个第一应用;还适于在第一应用服务器处理第一访问请求之前,在第一应用中插入第一监控对象,以便在第一应用处理第一访问请求时,执行该第一监控对象以获取第一应用的执行性能信息;请求生成模块,适于当第一应用服务器中的一个或者多个第一应用在处理第一访问请求期间需要调用耦接到第一应用服务器的第二应用服务器中的一个或者多个第二应用时,根据第一访问请求生成第二访问请求,并且将第二访问请求发送到第二应用服务器,该第二访问请求包括第一访问请求的标识;以及上传数据模块,适于将所获取的第一应用的执行性能信息连同第一访问请求的标识一起发送到性能统计服务器,以便性能统计服务器根据来自第一应用服务器的执行性能信息以及第二应用服务器的执行性能信息来对处理该第一访问请求的性能进行分析。
可选地,在根据本发明的性能监控装置中,插装对象模块还包括检测模块,该检测模块适于根据预置的配置文件,判断是否需要在第一应用中插入第一监控对象。
可选地,在根据本发明的性能监控装置中,检测模块适于检测第一访问请求中是否包括第三访问请求的标识,若是,则在第一应用中插入第一监控对象,以便在第一应用处理第一访问请求时,执行第一监控对象以获取第一应用的执行性能信息,该第一监控对象包括第三访问请求的标识,以及所获取的第一应用的执行性能信息中包括第三访问请求的标识。
可选地,在根据本发明的性能监控装置中,第一访问请求、第二访问请求和第三访问请求为http访问请求,其中标识位于对应访问请求的header字段中。
可选地,在根据本发明的性能监控装置中,第一访问请求、第二访问请求和第三访问请求均包括时间戳。
可选地,在根据本发明的性能监控装置中,第一访问请求、第二访问请求和第三访问请求的标识均包括该访问请求对应的应用服务器的标识。
根据本发明的还有一个方面,提供了一种性能监控系统,该系统包括:一个或多个应用服务器,该一个或多个应用服务器中驻留有根据本发明的性能监控装置;以及性能监控服务器,适于接收一个或多个应用服务器中性能监控装置上传的执行性能信息,并根据来自一个或多个应用服务器的执行性能信息对处理访问请求的性能进行分析。
根据本发明的性能监控方案,通过在处理跨应用访问请求过程中调用的多个不同应用服务器上的多个应用中插装监控对象,在该应用处理其接收的访问请求时执行监控对象获得对应应用的执行性能信息,从而实现了代码级别的性能追踪。同时,通过将访问请求的标识插装至对应应用的监控对象中,获得包含该访问请求标识的执行性能信息,并将其上传至性能统计服务器,以便性能统计服务器根据来自多个应用服务器的执行性能信息及其标识来对处理跨应用访问请求的性能进行分析,实现了对跨应用调用访问请求的性能监控。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1是根据本发明一个示例性实施例的性能监控系统100的结构框图。性能监控系统100可以包括性能监控服务器110以及一个或多个应用服务器120。其中,应用服务器上驻留有根据本发明的性能监控装置200。性能监控服务器110以及一个或多个应用服务器120之间通过网络连接。
图2示出了根据本发明的性能监控系统100的又一个实施例结构框图。如图2所示,性能监控系统100可以包括性能监控服务器110、第一应用服务器120以及第二应用服务器120。性能监控服务器110、第一应用服务器120和第二应用服务器120之间通过网络连接。其中,第一应用服务器120上存储有一个或多个第一应用,第二应用服务器120上存储有一个或多个第二应用,以便应用服务器接收到用户的访问请求时调用相应的应用进行处理。第一应用服务器120和第二应用服务器120上均驻留有根据本发明的性能监控装置200。
图4示出了根据本发明一个示例性实施例的性能监控装置200的结构框图,性能监控装置200可以包括插装对象模块220、生成请求模块240以及上传数据模块260。
用户可以通过web浏览器或应用客户端经由网络访问第一应用服务器120。性能监控装置200包含在第一应用服务器120中,其中的插装对象模块220接收第一访问请求,并确定为了响应和处理该第一访问请求,需要调用第一应用服务器中的那些第一应用。第一访问请求可以是经由http(s)协议而传输到第一应用服务器120。
插装对象模块220在第一应用服务器120处理第一访问请求之前,在第一应用中插入第一监控对象,以便在第一应用处理第一访问请求时,执行第一监控对象以获取第一应用的执行性能信息。
其中插装对象模块220还可以包括检测模块。在第一应用服务器处理第一访问请求之前,检测模块根据预置的配置文件,判断是否需要在第一应用中插入第一监控对象。具体来说,当检测模块检测到第一访问请求请求访问的第一应用中的需要被监控的某些类或方法要被加载时,插装对象模块220在该第一应用中插入第一监控对象。该第一监控对象通常是一些监控代码。当第一应用为了处理第一访问请求,执行第一应用中的某些类或方法时,同时也执行了插装在其中的第一监控对象,第一监控对象从而可以获取该第一应用的执行性能信息,例如执行时间、线程信息、错误信息等。需要被监控的某些类或方法可以存储在预置的配置文件中,该配置文件一般为XML或者YML格式。应当注意的是,需要被监控的对象还可以是接口、过滤器或其定义的方法,还可以由用户根据根据实际情况配置,本发明对此不做限制。
如图2所示,性能监控系统100还可以包括第三应用服务器120,与第一应用服务器120和第二应用服务器120相同,第三应用服务器上存储有一个或多个第三应用,并同样驻留有性能监控装置200。
插装对象模块220在第一应用中插入第一监控对象时,检测模块检测第一访问请求中是否包括第三访问请求的标识,该标识可以是应用id或sessionid等信息,通常可用于唯一地识别其对应的应用以及应用服务器。例如当应用接收到基于http(s)协议的请求时,可以检查请求的header字段中是否存在先前应用的id。
若第一访问请求中包括第三访问请求的标识,则插装对象模块220在将要插入第一应用的第一监控对象中写入第三访问请求的标识。而后,第一应用处理第一访问请求、执行第一监控对象,插装对象模块220获取第一应用的执行性能信息,所获取的第一应用的执行性能信息中也包括第三访问请求的标识。
通常地,企业会采用分布式的架构部署其应用服务器,多个不同的应用部署在不同的应用服务器。因此通常需要调用在不同应用服务器中的不同应用来处理一个访问请求。当第一应用服务器120中的一个或者多个第一应用在处理第一访问请求期间需要调用第二应用服务器120中的一个或者多个第二应用时,生成请求模块240根据第一访问请求生成第二访问请求,并且将第二访问请求发送到第二应用服务器120。第二访问请求包括第一访问请求的标识。第一访问请求、第二访问请求和第三访问请求通常是基于http(s)协议的请求,生成请求模块240将第一访问请求的标识写入第三访问请求的header字段中。第一访问请求、第二访问请求和第三访问请求的标识可以是应用id或session id等信息,通常可用于唯一地识别其对应的应用以及应用服务器。该标识还可以包括访问请求对应的应用服务器的标识和时间戳。
第二应用服务器120接收来自第一应用服务器120的第二访问请求,驻留在第二应用服务器120中的性能监控装置200在第二应用服务器120处理第二访问请求之前,在第二应用中插入第二监控对象,以便在第二应用处理第二访问请求时,执行所述第二监控对象以获取第二应用的执行性能信息。可知该第二监控对象包括第一访问请求的标识,以及所获取的第二应用的执行性能信息中包括第一访问请求的标识。第二应用服务器120结构同第一应用服务器相同,在结合图3对第一应用服务器120中性能监控装置200的具体描述中已经对处理访问请求的各步骤进行了详细说明,此处不再赘述。
第一应用和第二应用处理完相应的访问请求后,第一应用服务器120中的上传数据模块260和第二应用服务器120中的上传数据模块260将所获取到的第一应用的执行性能信息连同第一访问请求的标识、以及第二应用的执行性能信息连同第二访问请求的标识一起发送至性能统计服务器110。
性能统计服务器110接收来自第一应用服务器120的执行性能信息和第一访问请求的标识,以及来自第二应用服务器120的执行性能信息和第二访问请求的标识,并根据标识结合来自第一应用服务器120的执行性能信息和第二应用服务器120的执行性能信息来对处理第一访问请求的性能进行分析。
图3示出了根据本发明的性能监控系统100的还有一个实施例的示意图。该性能监控系统100包括性能监控服务器110、由企业部署和运营的企业服务器和多个用户计算终端。其中,企业服务器可以向用户计算终端提供各种服务,如web和应用服务。对于企业而言,其可能会具有多个不同的应用部署在不同的应用服务器,甚至部署在不同的企业服务器中,对于企业的某个业务而言,在业务处理期间,需要调用不同的应用。
用户计算终端上安装有web浏览器和/或app应用客户端,通过网络访问一个或者多个企业服务器,一个或者多个企业服务器的web服务器接收到用户计算终端的http(s)请求后,在该企业服务器上的应用服务器120执行相应的业务并将结果通过web服务器返回给用户计算终端。
各企业服务器的应用服务器120中均嵌入有性能监控装置200,该装置200通常在JVM(Java虚拟机)上执行。
当性能监控装置200检测到某些类(还可以是Java中的类、接口、过滤器、以及类、接口、过滤器中定义的方法)要被加载时,性能监控装置200就将相应的监控代码插装到该类中。这些监控代码可以在该类的执行过程中获取关于性能的采样数据,包括执行时间、线程信息、错误信息等。
其中进一步地,应用服务器120上某个应用接收到http(s)请求时,首先会检查在该请求的http(s)的header中是否存在有先前应用的id以及一些类似于session id的信息;如果有,则在对处理该http(s)请求的第一个类的实例进行监控代码插装时,从http(s)header的cookie中读取先前应用的id和先前应用调用的唯一标识(或者从session中读取),并且写入到监控代码的某个字段中。监控代码执行后获取到的执行性能信息则包括了先前应用的id和先前应用调用的唯一标识。
在处理该http(s)请求的过程中,当前应用服务器120检测到响应该请求需要调用其它应用服务器120中的应用时,性能监控装置200生成跨应用调用的http(s)请求,并将当前应用id,当前session的唯一标识写入该生成的http(s)请求的header中。其他应用服务器响应http(s)请求的步骤同上,此处不再赘述。
在http请求需要调用的各应用处理完成后,相应应用的执行性能信息存储在其企业服务器中。这些执行性能信息由各应用所在的各应用服务器120中性能监控装置200上传至性能监控服务器110。通常是定期(例如每隔一分钟)将这些执行性能信息发送给性能监控服务器110。
性能监控服务器110可以包含性能数据分析组件112和web服务器114,其web服务器114接收到由企业服务器发送的上述执行性能信息后,将这些信息送往性能数据分析组件112,由性能数据分析组件112根据这些执行性能信息中的标识对执行性能信息进行组合并分析,从而得出关于整个跨应用业务性能的各种加工数据,如各种事务的响应时间、吞吐量、错误率等。这样,开发人员通过浏览器访问性能监控服务器110就能查看企业服务器的各种性能信息,迅速找到性能瓶颈,从而采取相应的改进措施。
图5示出了根据本发明一个实施例的性能监控方法的流程图。该方法适于在适于在驻留在第一应用服务器的性能监控装置中执行。
如图5所示,性能监控方法始于步骤S310,在步骤S310中,在第一应用服务器处接收第一访问请求,该第一访问请求请求访问第一应用服务器中的一个或者多个第一应用。第一应用服务器上一般部署有一个或多个第一应用,用于给用户提供网络服务。第一访问请求通常是http(s)请求。
接收到第一访问请求后,在步骤S320中在第一应用服务器处理第一访问请求之前,在第一应用中插入第一监控对象,以便在第一应用处理第一访问请求时,执行第一监控对象以获取第一应用的执行性能信息。根据本发明的一个实施方式,在第一应用中插入第一监控对象的步骤之前可以根据预置的配置文件,判断是否需要在第一应用中插入第一监控对象。该配置文件通常为XML或者YML格式,其中存储需要监控的应用或者应用中的诸如类或方法的对象。
若确定需要在该第一应用中插入第一监控对象,则根据本发明的另一个实施方式,可以检测第一访问请求中是否包括第三访问请求的标识,第三访问请求通常也是http(s)请求,请求访问第三应用服务器中的一个或者多个第三应用。该标识可以是应用id或session id等信息,通常可用于唯一地识别其对应的应用以及应用服务器。
若第一访问请求中包括第三访问请求的标识,则在第一应用中插入第一监控对象,以便在第一应用处理第一访问请求时,执行第一监控对象以获取第一应用的执行性能信息,第一监控对象包括第三访问请求的标识,以及所获取的第一应用的执行性能信息中包括第三访问请求的标识。
当第一应用服务器中的一个或者多个第一应用在处理第一访问请求期间需要调用第二应用服务器中的一个或者多个第二应用时,在步骤S330中根据第一访问请求生成第二访问请求,并且将第二访问请求发送到第二应用服务器,所述第二访问请求包括第一访问请求的标识。其中第二访问请求及其标识与第一、第三访问请求格式相同,可将第一访问请求的标识写入第二访问请求的header字段中。根据本发明的又一个实施方式,第一、第二和第三访问请求的标识还可以包括该访问请求对应的应用服务器的标识和时间戳。
而后在步骤S340中,将所获取的第一应用的执行性能信息连同所述第一访问请求的标识一起发送到性能统计服务器,以便性能统计服务器根据来自第一应用服务器的执行性能信息以及第二应用服务器的执行性能信息来对处理该第一访问请求的性能进行分析,从而实现了对跨应用调用的性能监控。
根据本发明的还有一个实施方式,性能监控方法还包括如图6所示的步骤。
首先,在步骤S410中,在第二应用服务器处接收第二访问请求,第二访问请求来自第一应用服务器,包括第一访问请求的标识。
在第二应用服务器处理第二访问请求之前,在步骤S420中,在第二应用中插入第二监控对象,以便在第二应用处理第二访问请求时,执行第二监控对象以获取第二应用的执行性能信息,该第二监控对象包括第一访问请求的标识,以及所获取的第二应用的执行性能信息中包括第一访问请求的标识。
其中在第二应用中插入第二监控对象的步骤之前还可以根据第二应用服务器预置的配置文件,判断是否需要在第二应用中插入第二监控对象。
最后,第二应用处理完第二访问请求之后,在步骤S430中将第二应用的执行性能信息连同第一访问请求的标识一起发送到性能统计服务器。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本发明还包括:A7、如A5、A6所述的方法,所述第一访问请求、第二访问请求和第三访问请求均包括时间戳。A8、如A1-A7中任一所述的方法,所述第一访问请求、第二访问请求和第三访问请求的标识均包括所述访问请求对应的应用服务器的标识。B12、如B9-B11中任一所述的性能监控装置,所述第一访问请求、第二访问请求和第三访问请求为http访问请求,其中所述标识位于对应访问请求的header字段中。B13、如B9-B12中任一所述的性能监控装置,所述第一访问请求、第二访问请求和第三访问请求均包括时间戳。B14、如B9-B13中任一所述的性能监控装置,所述第一访问请求、第二访问请求和第三访问请求的标识均包括所述访问请求对应的应用服务器的标识。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。