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

文档序号:6570949阅读:433来源:国知局
专利名称:用于诊断应用程序的方法和系统的制作方法
技术领域
本发明涉及计算机程序的故障诊断。更具体地说,本发明涉及利 用环境复制来诊断应用程序的方法、系统和计算机程序产品。
背景技术
随着互联网的迅猛发展和WWW应用的快速增长,Java语言成 为互联网上受到广泛欢迎的开发与编程语言。目前Java家族中包括三 个主要的成员J2ME(Java 2 Micro Edition, Java 2微型版)、 J2SE(Java 2 Standard Edition, Java 2标准版)、和J2EE (Java 2 Enterprise Edition, Jave2企业版)。其中,J2EE由于具有跨平台可 移植性、可获得开放源码库、具有巨大的服务器端部署库、以及涵盖 大多数W3C(万维网联盟)标准等优点,在企业应用程序开发中非常 受欢迎。目前,在J2EE服务器上运行着数以百万计的J2EE应用程 序,而且越来越多的J2EE应用程序正在开发中。随着J2EE应用程序的流行,调试和问题确定(problem determiimtion )成为一个重要的问题。目前已经发布了几个与该问题 相关的标准,例如"Java管理扩展规范(Java Management Extensions(JMX) Specification )"、"日志API规范(Logging API Specification ( JSR47)),,、和"Java虚拟机的监视和管理规范 (Monitoring and Management Specificaiton for the Java Virtual Machine ( 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)数据、 类加栽数据、和共享的类,等等。尽管以上这些信息可以用于问题确定,用户仍然面临在成本与有 用性之间进行选择的两难境地。 一方面,应用服务器在运行中有可能 意外地崩溃/转储,而无法预测其时间。找到崩溃的原因是一件很困难的事情。尽管系统提供了一些最基本的可用于分析问题的信息,包括基本的日志文件(例如SystemOut.log等等)和前面提到过的转储文件, 但是基本的日志文件不能提供关于应用服务器的活动的足够详细的信 息,因而仅仅依赖这些日志文件不足以在应用服务器发生崩溃的情况 下确定问题,而通常的转储文件仅包含应用服务器转储时的当前状态, 而不包含其活动的历史记录,因此也不足以确定问题。另一方面,如 果用户在运行时打开用于诊断的日志/跟踪功能以详细地记录应用服 务器的活动,则系统性能将严重恶化,因为这些日志/跟踪功能的启用 会占用大量的存储空间并使系统的运行速度显著下降,并且还有可能 引起意想不到的问题。另外,太多的日志/跟踪数据意味着知识爆炸, 同样使得用户很难确定问题。因此,在生产环境中,打开这样的用于 诊断的日志/跟踪功能是不切实际的。图1中示出了各种问题确定手段的有用性与其实现成本之间的关 系。从图1中可以看出,具有较高有用性的手段意味着更高的成本, 因此在生产环境中是难以实施的。发明内容本发明的主要目的是克服现有技术中的上述问题,提供一种能够 在不影响应用服务器的运行性能的情况下,使用户容易地对应用程序 进行诊断的方法、系统和计算机程序产品。根据本发明的一个方面,提供一种能够对应用程序进行诊断的系 统,该系统包括所述应用程序的主运行环境及其至少一个影子环境, 所述影子环境是通过对所述主运行环境进行复制而得到的,该系统还 包括所述主运行环境中的诊断模块和所述影子环境中的诊断模块,二 者之间关于应用程序的故障而进行交互作用。优选地,所述主运行环 境中的诊断模块包括异常监视器,用于监视系统异常的发生;和异 常通知器,用于在所述异常监视器发现系统异常的情况下,将系统异 常信息发送给所述影子环境;并且,所述影子环境中的诊断模块包括: 异常接收器,用于与所述异常通知器相通信,以接收所述系统异常信息;诊断管理器,用于根据所述异常接收器接收到的所述系统异常信 息,打开用于诊断的日志/跟踪功能,从而获得与所述系统异常有关的诊断日志/跟踪文件;和诊断分析器,用于根据所述诊断管理器获得的 诊断日志/跟踪文件,分析诊断结果。根据本发明的另一个方面,提供一种用于诊断应用程序的方法, 包括以下步骤复制所述应用程序的主运行环境,从而得到其至少一 个影子环境;以及所述主运行环境与所述影子环境关于应用程序的故 障而进行交互作用。优选地,所述主运行环境与所述影子环境之间的 交互作用包括在所述主运行环境中执行下述步骤监视系统异常的 发生;和在发现系统异常的情况下,将系统异常信息发送给所述影子 环境;以及,在所述影子环境中执行下述步骤从所述主运行环境接 收所述系统异常信息,根据接收到的所述系统异常信息,打开用于诊 断的日志/跟踪功能,从而获得与所述系统异常有关的诊断日志/跟踪 文件;和根据获得的诊断日志/跟踪文件,分析诊断结果。根据本发明的另一个方面,提供一种计算机程序产品,包括程序 代码,当所述程序代码被计算机执行时,使得计算机执行本发明的应 用程序诊断方法。与对应用程序进行问题确定的现有方法相比,本发明的优点是, 当应用程序中出现异常时,系统可以自动地在"影子环境"(或者称 为"副运行环境")中打开用于诊断的日志/跟踪功能,因此能够详细 地记录应用服务器的活动而不影响主运行环境中的应用服务器的运行 性能。当主运行环境中的实例由于故障而崩溃时,则可以打开影子环 境中的另一个实例的详细记录来对应用程序的故障进行诊断。另外, 由于在影子环境中记录的仅仅是与系统异常相关的信息,因此用户可 以根据所得到的诊断日志/跟踪文件容易地检测到应用服务器中发生 的动作并找到故障原因,降低了应用服务器的工作负荷并能够实现按 需记录错误,从而优化了基于集成开发环境的日志机制。本发明既可 以用作基于集成开发环境开发应用程序的设计时工具,也可以用作运 行时工具。


根据以下参照附图对本发明优选实施例的详细描述,本发明的上 述及其它目的、特征和优点将变得更加清楚,附图中采用相同或相似 的标记来表示相同或相似的部件。图1中示出了各种问题确定手段的有用性与实现成本之间的关系;图2示意性地说明了本发明的利用环境复制来对应用程序进行诊 断的原理;图3示出了根据本发明优选实施例的、能够对应用程序进行诊断 的系统的示意性框图;图4示出了根据本发明优选实施例的、用于诊断应用程序的方法 的流程图。
具体实施方式
图2示意性地说明了本发明的利用环境复制来对应用程序进行诊 断的原理。本发明的核心思想是根据应用程序的主运行环境复制一 个或多个影子环境,该影子环境专门用来进行应用程序的故障诊断。 本具体实施方式
部分基于一个影子环境进行说明,但本领域技术人员 根据本发明必然明了,两个或两个以上的影子环境同样能够解决本发 明的技术问题并取得相应的技术效果,且本领域技术人员基于本发明 由一个影子环境构造更多的影子环境不需要任何创造性的劳动。当运 行应用程序时,分别启动主运行环境及其影子环境。与此同时,也分 别在这两个环境中启动了 "轻量级"诊断(S201和S203)。所谓"轻 量级"诊断,是指根据系统提供的一些基本信息对系统状态进行监视, 以便监视系统中发生的异常事件。当在主运行环境中检测到系统异常 事件时(S205),则将其汇报给影子环境,并在影子环境中启动"重量 级"诊断(S207),而主运行环境继续照常工作。所谓"重量级"诊断, 是指打开用于诊断的日志/跟踪功能,以便详细地记录应用服务器的运行信息以供诊断分析使用。然后,在影子环境中,根据在"重量级" 诊断中获得的详细的诊断日志/跟踪文件进行应用程序的诊断分析,从而识别问题并采取相应的措施。需要指出的是,图2仅仅是为了说明本发明的原理而在时间轴上示意性地而非按比例地表示出应用程序诊 断系统的工作流。图3示出了根据本发明优选实施例的、对J2EE应用程序进行诊断 的系统300的示意性框图。该系统300包括J2EE应用程序304的主运行环境302。该主运 行环境302可以实现在符合J2EE标准的应用服务器平台、例如IBM 公司的WebSphere应用服务器平台(包括WebSphere Application Server 5.X版、WebSphere Application Server 6.X版,等等)上。 WebSphere应用服务器平台用来部署作为Java服务器方代码实现的 应用程序304,并且能够在Microsoft公司的Windows NT与Windows 2000操作系统上使用,也可以在大多数UNIX操作系统变体(例如 Sun Solaris、 IBM AIX、 HP-UX)以及IBM AS/400操作系统上使用, 作为应用程序与操作系统之间的中间件。WebSphere应用服务器平台 的集成开发环境316则嚢括了 J2EE应用程序304的构建、测试与部 署的整个生命周期,为WebSphere应用服务器提供了完整的开发、测 试环境。集成开发环境316例如可以由WebSphere产品家族中的 WSAD( WebSphere Studio Application Developer )或者RAD(Rational Application 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用于对系统的状态进行监视, 以便监视系统异常事件的发生。例如,当系统日志文件中有异常信息、例如SystemErr.log时,异常监视器306分析该镣溪消息以便识别错误类 别。异常通知器308用于将异常监视器306检测到的异常信息连同识别 出的错误类别发送到影子环境302'。影子环境302'的诊断模块301,中 的异常接收器314,用于与主运行环境302中的异常通知器308相通信, 并从异常通知器308接收所述异常信息。诊断管理器310'用于根据所 述异常接收器314,接收到的所述系统异常信息,打开与其相关的、 用于诊断的日志/跟踪功能,从而获得与该系统异常有关的诊断日志/ 跟踪文件。诊断分析器312'用于根据所述诊断管理器310,获得的诊 断日志/跟踪文件,分析诊断结果。
图4详细示出了根据本发明优选实施例的、用于诊断应用程序的 方法400的流程图。
首先,在步骤402,对应用程序304的主运4亍环境302进行复制, 得到一个影子环境302,,以便用来进行应用程序的故障诊断。根据优 选的实施方式,所述影子环境302'包括与主运行环境302中的集成 开发环境316相同的集成开发环境316,,以及部署在其上的、与主 运行环境302中的应用程序304相同的应用程序304'。
在步骤404,启动主运行环境302和影子环境302'中的集成开 发环境316和316'。
在步骤406,主运行环境302中的异常监视器306监视系统中的 异常事件,例如内存不足、堆栈溢出、线程中断、线程死锁、找不到 指定的文件、输入输出处理错误、数据库处理错误,等等。作为示例, 异常监视器306可以通过监视系统日志文件来监视异常事件的发生。 在运行中,WebSphere应用服务器将系统消息写到一些基本的日志文 件中。这些日志文件例如包括JVM(标准)日志,该日志通过将JVM 的System.out和System.err流重定向到独立的日志文件而创建。 WebSphere应用服务器将格式化的消息写到System.out流。另外, 应用程序和其他代码可以写入这些流,这通过^f吏用流定义的print() 和println()方法实现。在默认的情况下,经重定向而创建的日志文件4皮存储为<WAS_HOME>/logs/<server_name>/SystemOut.log文件 和 <WAS—HOME>/logs/<server—nameWSystemEir.log文件 。 System.out日志用于监控正在运行的WebSphere应用服务器的状态是 否正常,而System.err日志则包含异常堆栈信息。日志条目的基本格 式例如为
<时间戳〉 <线程ID> <组件> <事件类型> <消息ID> <消息>。
当在步骤406中异常监视器306发现系统日志文件中有异常信息、 例如SystemErr.log文件时,异常监视器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应用月PL务器平台提供的日志分析器 来实现。该日志分析器是一种图形化用户接口 (GUI)诊断工具,可 以读取一个或多个日志/跟踪,合并所有数据并依次显示日志/跟踪条
目。优选地,该诊断工具自带一个XML数据库即"症状数据库 (Symptom database),,,其包含一些常见问题的信息串、错误原因 以及恢复步骤。日志分析器自动地将诊断日志/跟踪文件中的每个错误 记录与症状数据库中的已知问题的集合相比较并显示匹配项,使得用 户可以获得错误消息的解释、和有关错误原因及如何恢复错误的信息。 由此,本发明提供了 一种利用环境复制的应用程序诊断方法和系 统。本发明可以釆取全部硬件实现、全部软件实现或者包含硬件和软 件元素两者实现的形式。在优选的实施例中,本发明是以软件方式实 现的,其包括但不局限于固件、常驻软件、微代码等等。
此外,本发明可以采取计算机程序产品的形式,并可以从计算机 可读介质访问。该计算机可读介质提供程序代码以结合计算机或者任 何指令执行系统来使用。所述计算机可读介质可以是电子的、磁性的、 光学的、电磁的、红外的或者半导体器件或装置。计算机可读介质的 具体例子包括半导体或者固态存储器、磁带、可移动的计算机软盘、 随机存取存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。 光盘的当前示例包括光盘只读存储器(CD-ROM)、读/写光盘 (CD-R/W)和数字多用盘(DVD),等等。
上面已经参照特定实施例对本发明进行了详细描述。但是,对优 选实施例的详细描述仅仅是示例性的,而不应被理解为限制性的。例如, 在说明书中是结合IBM公司的Websphere应用服务器平台来描述本发明 的。但是本领域技术人员可以理解,本发明不限于此,而是也可以应用 于遵循J2EE标准的其他应用服务器平台、例如BEA公司的WebLogic 应用服务器平台,等等。另外,本发明也不限于J2EE标准,而是可以 应用于基于遵循任何工业标准的集成开发环境的应用程序开发、测试过 程。在不脱离本发明的精神和范围的情况下,本领域的技术人员可以 进行各种修改和替换。本申请的保护范围应该由后附的权利要求书来确 定。
权利要求
1. 一种用于对应用程序进行诊断的系统,包括所述应用程序的主运行环境及其至少一个影子环境,所述影子环境是通过对所述主运行环境进行复制而得到的,该系统还至少包括所述主运行环境中的诊断模块和所述影子环境中的诊断模块,二者之间可以关于应用程序的故障而进行交互作用。
2、 如权利要求l所述的系统,其中所述主运行环境中的诊断模 块与所述影子环境中的诊断模块之间的交互作用包括系统异常信息的 交换。
3、 如权利要求l、 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中任何一项所述的应用 程序诊断方法。
全文摘要
一种用于诊断应用程序的方法,包括步骤复制应用程序的主运行环境,从而得到其影子环境;以及主运行环境与影子环境关于应用程序的故障而进行交互作用。其中,在主运行环境中执行步骤监视系统异常的发生;和在发现系统异常的情况下,将系统异常信息发送给所述影子环境;以及在影子环境中执行步骤从所述主运行环境接收系统异常信息,打开用于诊断的日志/跟踪功能,从而获得与系统异常有关的诊断日志/跟踪文件;和根据获得的诊断日志/跟踪文件,分析诊断结果。本发明还提供用于实现上述应用程序诊断方法的系统和计算机程序产品。本发明可以使用户容易地对应用程序进行诊断而不影响应用服务器的运行性能,优化了基于集成开发环境的日志机制。
文档编号G06F11/36GK101226499SQ200710001769
公开日2008年7月23日 申请日期2007年1月16日 优先权日2007年1月16日
发明者兰东俊, 萌 叶, 王庆波, 龙 程, 滢 陈 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1