2024年6月15日发(作者:)

(19)中华人民共和国国家知识产权局

(12)发明专利说明书

(21)申请号 CN2.5

(22)申请日 2007.01.16

(71)申请人 国际商业机器公司

地址 美国纽约

(72)发明人 程龙 兰东俊 王庆波 叶萌 陈滢

(74)专利代理机构 中国国际贸易促进委员会专利商标事务所

代理人 杜娟

(51)

(10)申请公布号 CN 101226499 A

(43)申请公布日 2008.07.23

权利要求说明书 说明书 幅图

(54)发明名称

用于诊断应用程序的方法和系统

(57)摘要

一种用于诊断应用程序的方法,包

括步骤:复制应用程序的主运行环境,从

而得到其影子环境;以及主运行环境与影

子环境关于应用程序的故障而进行交互作

用。其中,在主运行环境中执行步骤:监

视系统异常的发生;和在发现系统异常的

情况下,将系统异常信息发送给所述影子

环境;以及在影子环境中执行步骤:从所

述主运行环境接收系统异常信息,打开用

于诊断的日志/跟踪功能,从而获得与系统

异常有关的诊断日志/跟踪文件;和根据获

得的诊断日志/跟踪文件,分析诊断结果。

本发明还提供用于实现上述应用程序诊断

方法的系统和计算机程序产品。本发明可

以使用户容易地对应用程序进行诊断而不

影响应用服务器的运行性能,优化了基于

集成开发环境的日志机制。

法律状态

法律状态公告日

法律状态信息

法律状态

权 利 要 求 说 明 书

1.一种用于对应用程序进行诊断的系统,包括所述应用程序的主运行环境及其至少

一个影子环境,所述影子环境是通过对所述主运行环境进行复制而得到的,该系统

还至少包括所述主运行环境中的诊断模块和所述影子环境中的诊断模块,二者之间

可以关于应用程序的故障而进行交互作用。

2.如权利要求1所述的系统,其中所述主运行环境中的诊断模块与所述影子环境中

的诊断模块之间的交互作用包括系统异常信息的交换。

3.如权利要求1、2中任一项所述的用于对应用程序进行诊断的系统,其中:

所述主运行环境中的诊断模块包括:

异常监视器,用于监视系统异常的发生;和

异常通知器,用于在所述异常监视器发现系统异常的情况下,将系统异常信息发送

给所述影子环境;

并且,

所述影子环境中的诊断模块包括:

异常接收器,用于与所述异常通知器相通信,以接收所述系统异常信息;

诊断管理器,用于根据所述异常接收器接收到的所述系统异常信息,打开用于诊断

的日志/跟踪功能,从而获得与所述系统异常有关的诊断日志/跟踪文件;和

诊断分析器,用于根据所述诊断管理器获得的诊断日志/跟踪文件,分析诊断结果。

4.如权利要求3所述的用于对应用程序进行诊断的系统,其中所述异常监视器通过

监视基本的系统日志文件来监视所述系统异常的发生。

5.如权利要求3所述的用于对应用程序进行诊断的系统,其中所述主运行环境中的

异常通知器与所述影子环境中的异常接收器之间的通信是Socket通信。

6.如权利要求3所述的用于对应用程序进行诊断的系统,其中通过JMX调用或者

系统开关打开所述用于诊断的日志/跟踪功能。

7.如权利要求3所述的用于对应用程序进行诊断的系统,其中所述系统遵循J2EE

标准,并且所述主运行环境和所述影子环境实现在WebSphere应用服务器平台或

WebLogic应用服务器平台上。

8.一种用于诊断应用程序的方法,包括以下步骤:

复制所述应用程序的主运行环境,从而得到其至少一个影子环境;以及

所述主运行环境与所述影子环境关于应用程序的故障而进行交互作用。

9.如权利要求8所述的方法,其中所述交互作用包括系统异常信息的交换。

10.如权利要求8、9中任一项所述的用于诊断应用程序的方法,所述主运

行环境与所述影子环境之间的交互作用包括:

在所述主运行环境中执行下述步骤:

监视系统异常的发生;和

在发现系统异常的情况下,将系统异常信息发送给所述影子环境;

以及,

在所述影子环境中执行下述步骤:

从所述主运行环境接收所述系统异常信息,

根据接收到的所述系统异常信息,打开用于诊断的日志/跟踪功能,从而获得与所

述系统异常有关的诊断日志/跟踪文件;和

根据获得的诊断日志/跟踪文件,分析诊断结果。

11.如权利要求10所述的用于诊断应用程序的方法,其中通过监视基本的系统日志

文件来监视所述系统异常的发生。

12.如权利要求10所述的用于诊断应用程序的方法,其中所述主运行环境与所述影

子环境之间的通信为Socket通信。

13.如权利要求10所述的用于诊断应用程序的方法,其中通过JMX调用或者系统

开关打开所述用于诊断的日志/跟踪功能。

14.如权利要求10所述的用于诊断应用程序的方法,其中所述方法遵循J2EE标准,

并且所述主运行环境和所述影子环境实现在WebSphere应用服务器平台或

WebLogic应用服务器平台上。

15.一种计算机程序产品,包括程序代码,当所述程序代码被计算机执行时,使得

计算机执行如权利要求8-14中任何一项所述的应用程序诊断方法。

说 明 书

技术领域

本发明涉及计算机程序的故障诊断。更具体地说,本发明涉及利用环境复制来诊断

应用程序的方法、系统和计算机程序产品。

背景技术

随着互联网的迅猛发展和WWW应用的快速增长,Java语言成为互联网上受到广

泛欢迎的开发与编程语言。目前Java家族中包括三个主要的成员:

J2ME(Java 2 Micro Edition,Java 2微型版)、J2SE(Java 2 Standard Edition,Java 2标

准版)、和J2EE(Java 2Enterprise Edition,Jave 2企业版)。其中,J2EE由于具有跨

平台可移植性、可获得开放源码库、具有巨大的服务器端部署库、以及涵盖大多数

W3C(万维网联盟)标准等优点,在企业应用程序开发中非常受欢迎。目前,在

J2EE服务器上运行着数以百万计的J2EE应用程序,而且越来越多的J2EE应用程

序正在开发中。

随着J2EE应用程序的流行,调试和问题确定(problemdetermination)成为一个重要

的问题。目前已经发布了几个与该问题相关的标准,例如“Java管理扩展规范

(Java ManagementExtensions(JMX)Specification)”、“日志API规范

(Logging APISpecification(JSR47))”、和“Java虚拟机的监视和管理规范

(Monitoring and Management Specificaiton for the Java VirtualMachine(JSR174))”,等

等。

对系统进行诊断时所发现的问题例如可以分为以下五个类别:

(1)功能或集成错误;

(2)性能不良;

(3)崩溃;

(4)挂起;

(5)存储器泄露。

在上面列出的五种问题中,后三种问题是难以检测的。原因在于它们通常出现在高

容量的情况下,或者出现在长时间运行之后。因此,通常难以获取足够的信息以用

于问题确定。可能出现问题的方面包括:JVM(Java虚拟机)本身、本机码

(native code)、Java应用程序、系统或系统资源、子系统(例如数据库节点)、硬件,

等等。

在遵循J2EE标准的各种应用服务器环境中提供了一些可用于问题确定的信息,例

如包括:

Java转储(JavaDump):当JVM意外终止时默认地产生该Java转储数据,该数据概

括了JVM在该时刻的状态;

堆转储(HeapDump):堆转储数据根据用户的请求产生。对于堆转储的定时的更精

确的控制也可以利用Xdump:heap选项来规定;

系统转储(SystemDump):该系统转储数据也是由JVM产生的,它包含关于活动的

进程、线程和系统存储器的信息,并通过Xdump:system选项来规定;

跟踪数据(Trace data):该文件包含运行中的JVM所收集的详细数据;

快照跟踪(Snap trace):该文件包含运行中的JVM所收集的少量跟踪数据,与通常

的跟踪数据相似;

剖析(Profiling):该文件是一种较高级别的日志文件,能够对应用服务器的活动提

供非常详细的记录;

垃圾收集数据(Garbage collection data):该数据由JVM利用verbose:gc选项产生,

它用来分析在户应用程序的垃圾收集中的问题;

以及可以用于问题确定的其他数据,例JIT(Just In Time)数据、类加载数据、和共

享的类,等等。

尽管以上这些信息可以用于问题确定,用户仍然面临在成本与有用性之间进行选择

的两难境地。一方面,应用服务器在运行中有可能意外地崩溃/转储,而无法预测

其时间。找到崩溃的原因是一件很困难的事情。尽管系统提供了一些最基本的可用

于分析问题的信息,包括基本的日志文件(例如等等)和前面提到过

的转储文件,但是基本的日志文件不能提供关于应用服务器的活动的足够详细的信

息,因而仅仅依赖这些日志文件不足以在应用服务器发生崩溃的情况下确定问题,

而通常的转储文件仅包含应用服务器转储时的当前状态,而不包含其活动的历史记

录,因此也不足以确定问题。另一方面,如果用户在运行时打开用于诊断的日志/

跟踪功能以详细地记录应用服务器的活动,则系统性能将严重恶化,因为这些日志

/跟踪功能的启用会占用大量的存储空间并使系统的运行速度显著下降,并且还有

可能引起意想不到的问题。另外,太多的日志/跟踪数据意味着知识爆炸,同样使

得用户很难确定问题。因此,在生产环境中,打开这样的用于诊断的日志/跟踪功

能是不切实际的。

图1中示出了各种问题确定手段的有用性与其实现成本之间的关系。从图1中可以

看出,具有较高有用性的手段意味着更高的成本,因此在生产环境中是难以实施的。

发明内容

本发明的主要目的是克服现有技术中的上述问题,提供一种能够在不影响应用服务

器的运行性能的情况下,使用户容易地对应用程序进行诊断的方法、系统和计算机

程序产品。

根据本发明的一个方面,提供一种能够对应用程序进行诊断的系统,该系统包括所

述应用程序的主运行环境及其至少一个影子环境,所述影子环境是通过对所述主运

行环境进行复制而得到的,该系统还包括所述主运行环境中的诊断模块和所述影子

环境中的诊断模块,二者之间关于应用程序的故障而进行交互作用。优选地,所述

主运行环境中的诊断模块包括:异常监视器,用于监视系统异常的发生;和异常通

知器,用于在所述异常监视器发现系统异常的情况下,将系统异常信息发送给所述

影子环境;并且,所述影子环境中的诊断模块包括:异常接收器,用于与所述异常

通知器相通信,以接收所述系统异常信息;诊断管理器,用于根据所述异常接收器

接收到的所述系统异常信息,打开用于诊断的日志/跟踪功能,从而获得与所述系

统异常有关的诊断日志/跟踪文件;和诊断分析器,用于根据所述诊断管理器获得

的诊断日志/跟踪文件,分析诊断结果。

根据本发明的另一个方面,提供一种用于诊断应用程序的方法,包括以下步骤:复

制所述应用程序的主运行环境,从而得到其至少一个影子环境;以及所述主运行环

境与所述影子环境关于应用程序的故障而进行交互作用。优选地,所述主运行环境

与所述影子环境之间的交互作用包括:在所述主运行环境中执行下述步骤:监视系

统异常的发生;和在发现系统异常的情况下,将系统异常信息发送给所述影子环境;

以及,在所述影子环境中执行下述步骤:从所述主运行环境接收所述系统异常信息,

根据接收到的所述系统异常信息,打开用于诊断的日志/跟踪功能,从而获得与所

述系统异常有关的诊断日志/跟踪文件;和根据获得的诊断日志/跟踪文件,分析诊

断结果。

根据本发明的另一个方面,提供一种计算机程序产品,包括程序代码,当所述程序

代码被计算机执行时,使得计算机执行本发明的应用程序诊断方法。

与对应用程序进行问题确定的现有方法相比,本发明的优点是,当应用程序中出现

异常时,系统可以自动地在“影子环境”(或者称为“副运行环境”)中打开用于诊断的

日志/跟踪功能,因此能够详细地记录应用服务器的活动而不影响主运行环境中的

应用服务器的运行性能。当主运行环境中的实例由于故障而崩溃时,则可以打开影

子环境中的另一个实例的详细记录来对应用程序的故障进行诊断。另外,由于在影

子环境中记录的仅仅是与系统异常相关的信息,因此用户可以根据所得到的诊断日

志/跟踪文件容易地检测到应用服务器中发生的动作并找到故障原因,降低了应用

服务器的工作负荷并能够实现按需记录错误,从而优化了基于集成开发环境的日志

机制。本发明既可以用作基于集成开发环境开发应用程序的设计时工具,也可以用

作运行时工具。

附图说明

根据以下参照附图对本发明优选实施例的详细描述,本发明的上述及其它目的、特

征和优点将变得更加清楚,附图中采用相同或相似的标记来表示相同或相似的部件。

图1中示出了各种问题确定手段的有用性与实现成本之间的关系;

图2示意性地说明了本发明的利用环境复制来对应用程序进行诊断的原理;

图3示出了根据本发明优选实施例的、能够对应用程序进行诊断的系统的示意性框

图;

图4示出了根据本发明优选实施例的、用于诊断应用程序的方法的流程图。

具体实施方式

图2示意性地说明了本发明的利用环境复制来对应用程序进行诊断的原理。本发明

的核心思想是:根据应用程序的主运行环境复制一个或多个影子环境,该影子环境

专门用来进行应用程序的故障诊断。本具体实施方式部分基于一个影子环境进行说

明,但本领域技术人员根据本发明必然明了,两个或两个以上的影子环境同样能够

解决本发明的技术问题并取得相应的技术效果,且本领域技术人员基于本发明由一

个影子环境构造更多的影子环境不需要任何创造性的劳动。当运行应用程序时,分

别启动主运行环境及其影子环境。与此同时,也分别在这两个环境中启动了“轻量

级”诊断(S201和S203)。所谓“轻量级”诊断,是指根据系统提供的一些基本信息对

系统状态进行监视,以便监视系统中发生的异常事件。当在主运行环境中检测到系

统异常事件时(S205),则将其汇报给影子环境,并在影子环境中启动“重量级”诊断

(S207),而主运行环境继续照常工作。所谓“重量级”诊断,是指打开用于诊断的日

志/跟踪功能,以便详细地记录应用服务器的运行信息以供诊断分析使用。然后,

在影子环境中,根据在“重量级”诊断中获得的详细的诊断日志/跟踪文件进行应用

程序的诊断分析,从而识别问题并采取相应的措施。需要指出的是,图2仅仅是为

了说明本发明的原理而在时间轴上示意性地而非按比例地表示出应用程序诊断系统

的工作流。

图3示出了根据本发明优选实施例的、对J2EE应用程序进行诊断的系统300的示

意性框图。

该系统300包括J2EE应用程序304的主运行环境302。该主运行环境302可以实

现在符合J2EE标准的应用服务器平台、例如IBM公司的WebSphere应用服务器

平台(包括WebSphere ApplicationServer 5.X版、WebSphere Application Server 6.X

版,等等)上。WebSphere应用服务器平台用来部署作为Java服务器方代码实现的

应用程序304,并且能够在Microsoft公司的Windows NT与Windows2000操作系

统上使用,也可以在大多数UNIX操作系统变体(例如Sun Solaris、IBM AIX、HP-

UX)以及IBM AS/400操作系统上使用,作为应用程序与操作系统之间的中间件。

WebSphere应用服务器平台的集成开发环境316则囊括了J2EE应用程序304的构

建、测试与部署的整个生命周期,为WebSphere应用服务器提供了完整的开发、

测试环境。集成开发环境316例如可以由WebSphere产品家族中的

WSAD(WebSphere Studio Application Developer)或者

RAD(RationalApplication Developer)来实现。

系统300还包括一个影子环境302’(或称为“副运行环境”),专门用于应用程序的诊

断。该影子环境302’是通过对主运行环境302进行复制而得到的。所谓的“复制”,

指的是基于与主运行环境302同样的Websphere应用服务器平台或WebBlog应用

服务器(并且注意,上述应用服务器只是示例性的,事实上任何应用服务器中间件

都是适合的),按照与主运行环境302中的应用程序304同样的方式部署一个相同

的应用程序304’。主运行环境302和影子环境302’中的集成开发环境316、316’并

不是必须的。在优选的实施方式中,应用程序304’的集成开发环境316’与应用程

序304的集成开发环境316相同,但本发明不限于此,而是可以采用不同的集成开

发环境来构建、测试与部署应用程序304和304’。

为了实现应用程序的诊断,系统300还包括分别位于主运行环境302和影子环境

302’中的诊断模块301和301’。如下面将详细说明的,这两个诊断模块之间将关于

应用程序的故障而进行交互作用,事实上主运行环境302和影子环境302’中的诊

断模块并不限于只有一个,而是可以有多个。另外可以进行相互作用或者相互间通

讯的各种诊断模块都是适合于本发明的。作为优选,诊断模块301和301’分别包

括以下子模块:异常监视器306和306’、异常通知器308和308’、异常接收器314

和314’、诊断管理器310和310’,以及诊断分析器312和312’。需要说明的是,

由于影子环境302’是主运行环境302的副本,因此图3中示出诊断模块301’包括

与诊断模块301中的子模块306-314同样的子模块306’-314’。但是,在执行应用程

序诊断的过程中,主运行环境中302和影子环境302’中起作用的子模块是不同的。

在图3所示的实施例中,参与应用程序诊断的子模块包括主运行环境302中的异常

监视器306和异常通知器308,以及影子环境302’中的异常接收器314’、诊断管理

器310’和诊断分析器312’,而其他子模块不参与应用程序的诊断。

当然,这是从描述本实施例的角度而言的。在实际应用中,由于两个运行环境302

和302’是完全相同的,所以其中任一个环境都可以作为主运行环境,而另外一个

环境则作为该主运行环境的“影子”环境。在图3中所示的环境302’作为主运行环境

而环境302作为其影子环境的情况下,参与应用程序诊断的子模块相应地变为环境

302’中的异常监视器306’和异常通知器308’,以及环境302中的异常接收器314、

诊断管理器310和诊断分析器312。

诊断模块301中的异常监视器306用于对系统的状态进行监视,以便监视系统异常

事件的发生。例如,当系统日志文件中有异常信息、例如时,异常

监视器306分析该错误消息以便识别错误类别。异常通知器308用于将异常监视器

306检测到的异常信息连同识别出的错误类别发送到影子环境302’。影子环境302’

的诊断模块301’中的异常接收器314’用于与主运行环境302中的异常通知器308

相通信,并从异常通知器308接收所述异常信息。诊断管理器310’用于根据所述

异常接收器314’接收到的所述系统异常信息,打开与其相关的、用于诊断的日志/

跟踪功能,从而获得与该系统异常有关的诊断日志/跟踪文件。诊断分析器312’用

于根据所述诊断管理器310’获得的诊断日志/跟踪文件,分析诊断结果。

图4详细示出了根据本发明优选实施例的、用于诊断应用程序的方法400的流程图。

首先,在步骤402,对应用程序304的主运行环境302进行复制,得到一个影子环

境302’,以便用来进行应用程序的故障诊断。根据优选的实施方式,所述影子环

境302’包括与主运行环境302中的集成开发环境316相同的集成开发环境316’,

以及部署在其上的、与主运行环境302中的应用程序304相同的应用程序304’。

在步骤404,启动主运行环境302和影子环境302’中的集成开发环境316和316’。

在步骤406,主运行环境302中的异常监视器306监视系统中的异常事件,例如内

存不足、堆栈溢出、线程中断、线程死锁、找不到指定的文件、输入输出处理错误、

数据库处理错误,等等。作为示例,异常监视器306可以通过监视系统日志文件来

监视异常事件的发生。在运行中,WebSphere应用服务器将系统消息写到一些基本

的日志文件中。这些日志文件例如包括JVM(标准)日志,该日志通过将JVM的

和流重定向到独立的日志文件而创建。WebSphere应用服务

器将格式化的消息写到流。另外,应用程序和其他代码可以写入这些流,

这通过使用流定义的print()和println()方法实现。在默认的情况下,经重定向而创

建的日志文件被存储为

<WAS_HOME>/logs/<server_name>/文件和

<WAS_HOME>/logs/<server_name>/文件。日志

用于监控正在运行的WebSphere应用服务器的状态是否正常,而日志则

包含异常堆栈信息。日志条目的基本格式例如为

<时间戳><线程ID><组件><事件类型><消息ID><消

息>。

当在步骤406中异常监视器306发现系统日志文件中有异常信息、例如

文件时,异常监视器306在步骤410中分析该错误消息并通过例如关

键字匹配的方式识别错误类别。

在步骤412,主运行环境302中的异常通知器308将异常监视器306检测到的异常

信息连同所识别的错误类别发送到影子环境302’。影子环境302’中的异常接收器

314’用于接收该异常信息及识别的错误类别。根据本优选实施例,主运行环境302

中的异常通知器308与影子环境302’中的异常接收器314’之间采用TCP Socket方

式进行通信,其中异常接收器314’持续监听主运行环境302中的特定端口是否有

连接请求,异常通知器308发出连接请求后,异常接收器314’向其发回确认消息,

从而在二者之间建立起连接,用于异常信息的发送。本领域技术人员可以理解,主

运行环境302与影子环境302’之间也可以采用其他任何合适的方式进行通信。

接下来,在步骤422,影子环境302’中的诊断管理器310’开始应用程序诊断。

在步骤424,诊断管理器310’按照策略自动地打开一组预定的、用于诊断的日志功

能(例如剖析功能、IBM活动日志功能)和/或跟踪功能,以便详细地记录与所接收

的异常信息相关的运行信息。这可以通过JMX调用打开日志/跟踪功能或者通过系

统开关打开日志/跟踪功能来完成。

在步骤426,影子环境302’中的诊断分析器312’根据所述诊断管理器310’获得的诊

断日志/跟踪文件,分析诊断结果。该诊断分析器312’例如可以由Websphere应用

服务器平台提供的日志分析器来实现。该日志分析器是一种图形化用户接口(GUI)

诊断工具,可以读取一个或多个日志/跟踪,合并所有数据并依次显示日志/跟踪条

目。优选地,该诊断工具自带一个XML数据库即“症状数据库(Symptom database)”,

其包含一些常见问题的信息串、错误原因以及恢复步骤。日志分析器自动地将诊断

日志/跟踪文件中的每个错误记录与症状数据库中的已知问题的集合相比较并显示

匹配项,使得用户可以获得错误消息的解释、和有关错误原因及如何恢复错误的信

息。

由此,本发明提供了一种利用环境复制的应用程序诊断方法和系统。本发明可以采

取全部硬件实现、全部软件实现或者包含硬件和软件元素两者实现的形式。在优选

的实施例中,本发明是以软件方式实现的,其包括但不局限于固件、常驻软件、微

代码等等。

此外,本发明可以采取计算机程序产品的形式,并可以从计算机可读介质访问。该

计算机可读介质提供程序代码以结合计算机或者任何指令执行系统来使用。所述计

算机可读介质可以是电子的、磁性的、光学的、电磁的、红外的或者半导体器件或

装置。计算机可读介质的具体例子包括半导体或者固态存储器、磁带、可移动的计

算机软盘、随机存取存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。光盘的当

前示例包括光盘只读存储器(CD-ROM)、读/写光盘(CD-R/W)和数字多用盘(DVD),

等等。

上面已经参照特定实施例对本发明进行了详细描述。但是,对优选实施例的详细描

述仅仅是示例性的,而不应被理解为限制性的。例如,在说明书中是结合IBM公

司的Websphere应用服务器平台来描述本发明的。但是本领域技术人员可以理解,

本发明不限于此,而是也可以应用于遵循J2EE标准的其他应用服务器平台、例如

BEA公司的WebLogic应用服务器平台,等等。另外,本发明也不限于J2EE标准,

而是可以应用于基于遵循任何工业标准的集成开发环境的应用程序开发、测试过程。

在不脱离本发明的精神和范围的情况下,本领域的技术人员可以进行各种修改和替

换。本申请的保护范围应该由后附的权利要求书来确定。