级别: 初级 李 晓璐 , 顾问工程师, IBM 王 莎莎, 软件工程师, IBM
2009 年 11 月 05 日 本文描述了四种对基于 Java EE 应用进行深入分析的方法,简单说明了这几种方法各自的优缺点,并介绍了如何使用 ITCAM for Websphere 进行“在线分析”和“设置告警分析”的过程,这两种应用分析过程是建议采用的方法,能够有效的帮助开发和运行维护人员进行应用问题的定位和深入诊断。
引言
当前对基于 Java EE 应用问题的识别、隔离、诊断和修复是一件挺麻烦的事情,虽然在应用上线前,我们经过了严格的功能和性能测试,并通过严格的编码规范来保证应用的质量,但是经常会遇到上线之后一段时间内,应用系统总是处于不稳定的状态,然后又经过一段时间的缓慢分析才能发现一些应用开发中的问题,最后再修复它。除此之外,大多数应用都在其生命周期内会产生一些问题,而这些问题大多是偶发事件,经常会让维护和开发人员头疼不已,往往会消耗用户一些费用请技术专家去解决,耗时、耗力,而且知识也不能得到有效的积累。
下面,我们就围绕这类问题,通过 IBM Tivoli Composite Application Manager for WebSphere(以下简称 ITCAM for WebSphere)来说明如何使用 ITCAM for WebSphere 来快速发现、定位和解决应用中的问题。需要声明的是,这里探讨的主要是和应用相关的问题,而对于中间件,例如 Websphere 本身的性能调优不在这篇文章的讨论范围内。
说明:ITCAM for WebSphere 是 IBM 提供的一个专门为管理、分析和诊断复合应用问题而设计的管理、分析软件,它能够帮助用户快速定位性能瓶颈,发现引起应用问题的代码和服务器资源方面的错误和问题,从而保障应用顺畅运行。
应用问题分析和诊断的方法
在介绍使用 ITCAM for WebSphere 进行应用分析前,我们先来看看应用问题分析和诊断的方法,并会对它们进行一些比较。
应用问题分析和诊断的方法有多种,根据侧重点各有不同,通常有以下几种方法:
-
比较 Java 对象
这种方法通常是在 Java EE 应用发生问题后用来分析 Java core 等文件的。通过 Core Dump 出来的 java 对象信息的对照比较,来查看哪些对象在特定时间有异常的增长和资源的消耗。据此来发现程序开发中的问题,或者找到运行期间的瓶颈点来进行优化。
优点:WebSphere 的技术专家比较常用这种分析方法。
缺点:这种方法分析的过程比较复杂,需要较高的专业知识,另外这种方式主要适合事后分析。
-
分析正在运行的挂起请求以及与这个请求相关的 java 的堆栈对象和方法
这种方法一般在 Java EE 应用问题发生的当时非常有效,可以捕获到当时发生的请求,以及这种请求的调用层次关系来追踪到某个类的某个方法。
优点:分析在线的应用问题最有效。
缺点:能够进行在线分析的工具比较少,分析工具本身有对中间件的资源消耗。
-
设置告警,通过分析在告警产生时(比如应用缓慢或者异常)请求的调用关系和 java 堆栈的对象以及方法来诊断问题发生的根本原因。通常设置告警只是起到警告的作用,所以为了有效地分析问题发生时的情况,这种方法要求在告警的同时收集详细的应用现场信息,包括从某个请求进入,一层层的信息钻取,一直到最底层的方法调用
优点:
-
这种方法只对发生问题的程序详细信息进行收集,所以不会产生大量的垃圾信息(应用正常运行时的程序调用关系一般不会关注,正常情况下,只关注交易和响应时间以及 WebSphere 的资源和可用性状况),方便进行快速的分析诊断。
-
这种方法对系统性能的消耗最低。因为要获取程序代码级别的监控,一定要开启高级别的监控等级,以获取非常深入的程序数据,所以对系统资源的消耗比较大,给生产环境造成一定的压力。所以,如果采用这种方式,则大大降低了系统资源的消耗,只在有问题发生时收集程序级别的数据,保护了 WebSphere 服务器。
-
因为设置了告警,当应用有问题发生时会通知到管理人员。不用长期守护监控的信息。从而提高了管理人员的工作效率。
缺点:这类分析方法需要用户设置比较准确的阀值条件,要对应用的总体状况有一定的了解才能设置有效的阀值。另外由于涉及动态调整监控级别,只有少数一些分析工具(例如 ITCAM for WebSphere)能够实现。
-
通过收集历史数据进行分析,通过详细的报表数据去分析 Java EE 问题。
优点:最常见、最容易获得的分析方法。
缺点:这类分析方法缺乏时效性,且资源消耗过高。
通常对于用户来讲,第 2、3 两类分析方法最为有效,但是要求进行诊断、分析的工具有足够的功能去支持这种实时的详细数据的获取。ITCAM for WebSphere 具备上述 4 种分析的方法,下面通过介绍使用第 2、3 两种方式来说明如何进行应用问题的分析和诊断。

 |

|
用 ITCAM 进行应用问题的分析诊断
ITCAM for WebSphere 涵盖了上述几种分析方法,侧重于从应用的角度出发去分析问题,它是从应用交易缓慢或者异常这个信息出发点开始,通过层层的应用交易的分解、钻取来分析问题,最终发现导致应用问题的程序代码。以下着重从 Trap 告警和在线分析两种方式来介绍 ITCAM for WebSphere 进行问题分析和诊断的详细过程。
通过设置 Trap 来进行分析诊断
通常理想的问题分析过程应该从“应用”出发,而不是从“日志”出发。通过 ITCAM 设置例如“正在运行的应用响应时间缓慢”、“运行完毕的交易响应时间缓慢”、“JVM CPU 使用率过高”、“应用等待时间过长”等 Trap 开始。
图 1. 选择 Trap 类型为“应用”
在开始点,也可以从“系统”出发,设置如下图 2 所示。
图 2. 选择 Trap 类型为“系统资源”
其中每种 Trap 类型对应的设置选项是不同的,对于“以应用响应时间”为出发点的 Trap,可以通过以下过程设置:
第 1 步,设置 Trap 的类型,下图 3 以某个应用请求驻留时间为例。说明当某个请求发出后在规定的时间内还没有返回请求时则进行告警。
图 3. 选择按照应用的“驻留时间”为 Trap
第 2 步,设置告警的条件。下图 4 告警的条件是当正在执行的请求超过 15 秒则进行告警。
图 4. 设置阀值
第 3 步,设置告警后采取的动作。下图 5 告警后 ITCAM 要求 Agent(监控代理)进行 Method Trace,以便捕获当时的请求状况,作为详细分析使用,采用 Method Trace 可以将问题分析到代码级别。
图 5. 设置超过阀值时采取的“动作”
第 4 步,给这个 Trap 设置一个名称,并把此策略赋予某个 Websphere 实例。
图 6. 设置 Trap 名称
通过以上方式,ITCAM 就设定了可以查看到方法级别的监控。但是,因为有些 Trap 要达到方法、代码级别的监控需要 ITCAM 监控级别设置为最高 Level3,然而在 Level3 下会消耗 Websphere 本身的一些资源,所以 ITCAM 配置了一个特殊的 Trap —— Misbehaving Transaction 来实现监控级别的动态调整,如下图。这种 Trap 只要求 ITCAM 的监控级别设置为 Level2,在运行监控的过程中一旦应用发生问题激活了此 Trap,这个 Trap 就动态将监控级别调整到 Level3,收集当前的环境和应用请求以及方法调用的详细信息,当这些有用的信息收集完毕后,系统自动将监控级别调整到 Level2,在整个动态调整的过程中,不需要重启 WAS 服务器。
图 7. 设置“Misbehaving Transaction”Trap
图 8. 设置“Misbehaving Transaction”阀值
图 9. 设置“Misbehaving Transaction”发生后采取的动作
上面介绍了如何设置代码级别的分析,下面来看看分析过程:
当应用响应慢时,触发上面设置的 Trap,下图就是条件触发的 Trap 记录信息。
图 10. 查看 Trap 信息
通过点击 Action Taken,钻取这个告警,发现下图所示这是一个入口为 servlet 请求调用,耗时 89ms。
图 11. 钻取 Trap 信息
进一步点击钻取,这个 Servlet 调用了 doPost 方法,耗时 75ms。
图 12. 继续钻取
一步步地点击钻取,ITCAM 会将此次应用请求过程中缓慢的步骤用颜色标识出来,方便我们进行分析诊断,让我们更关注问题可能发生的调用,而不是全部应用。
图 13. 通过继续钻取发现请求“processRequest”调用最消耗资源
图 14. 最后定位到产生问题的 java 方法
最后定位出上述这个方法调用消耗了 57ms,是本次应用问题的根本原因。
通过上面的分析过程,可以看到 ITCAM 对于应用问题的分析、诊断过程是非常方便的,它首先是从应用的角度判断出系统出现了问题,进而收集到详细信息,然后发出告警。之后维护和开发人员能够通过钻取方式一步步的分析当时的情况,快速找到问题发生时与之相关的类和方法,从而找到应用问题所在。
注:通过 ITCAM 的监控可以监控到最底层的任何类型的调用,比如下图所示最后监控到一个 sql 语句。
图 15. 通过 ITCAM 可以查看到其它底层调用,例如 sql 语句
另外,可以通过 FlowView 的方式看到整个调用的全部层次,ITCAM 会将每次调用的入口和出口的时间列举出来,对于那些可疑的调用,ITCAM 会以颜色加深来标示。
图 16. 通过 FlowView 查看完整的调用关系
分析挂起的在线请求
上面介绍了如何设置 Trap 进行应用问题分析的方法。通常当应用挂起时采用 In-Flight 更容易更快速发现并解决应用的问题。
当有挂起的请求时,在菜单选择 In-Flight Request。
图 17. 通过 In-Flight 查看正在执行的请求
然后点击 Thread/TaskId,然后按照 Trap 分析的方法层层分析定位到方法。
图 18. 通过 Method Trace 查看调用细节,定位到程序方法
按照上图所示,在图示的左上角选择 Method/Component Trace,即可以按照第一种方式的分析过程进行分析。
总结
按照上述两种方法,当应用发生异常的时候,通过 ITCAM 收集现场状况进行深入地分析,有效地获取了数据,管理人员不需要全天候去监控应用的状况,同时通过 ITCAM 有效地降低了分析的难度,提高了应用深入分析的效率,让普通开发人员或者维护人员都能进行深入的问题分析,而不仅仅限于专家。ITCAM 能帮助应用管理者或者开发人员从应用请求点出发,一层层剥茧似的方式解析应用程序,最终到达问题的根源位置。
ITCAM for Websphere 是一个强大的基于 Websphere 的 J2EE 应用问题分析和诊断平台,而对于非 Websphere 的环境,同样有 ITCAM for J2EE 来进行深入的分析和诊断,其过程和 ITCAM for Websphere 是一致的。这样通过 ITCAM 能够涵盖完整的 J2EE 的分析和处理。
参考资料
作者简介  | 
|  | 李晓璐是 IBM SWG Tivoli 的一名顾问工程师。他主要负责 Tivoli Automation 和 Security 的售前工作。有 4 年 J2EE 的开发经验和 1 年 Lotus 的设计经验,熟悉工作流、BPM的设计和开发。 |
 | 
|  | 王莎莎是 IBM CDL Tivoli 的一名软件工程师。2006年加入 IBM,一直从事 ITCAM 家族产品的测试,有丰富的 CVT、SVT 和集成测试经验,目前主要负责 ITCAM for WebSphere/J2EE 的 SVT 测试工作。 |
对本文的评价
|