如何诊断如何诊断J2EE系统中的性能问题系统中的性能问题
现在要求您诊断 WebLogic J2EE 应用程序中的性能问题。因为 Java 系统是如此复杂,所以诊断 WebLogic J2EE 应用程序
中的性能问题就有点像诊断疑难杂症。
为了正确地找到问题所在,您需要对症状有全面了解,要做好准备进行大量研究工作,最后您需要制定正确的治疗方案。
本文讨论了 J2EE 应用程序性能问题的一些最常见类型和它们产生的原因,以及如何正确地诊断和消除它们的推荐指导原
则。
症状症状
WebLogic 应用程序性能问题的症状是什么?您看到的症状可以指导您在所有可能的问题中进行搜索。请准备一个笔记本
并开始向人们调查。试着把对问题根本原因的推测和假设与系统行为的实际证据分离。下面是一个常见症状集的列表:
持续缓慢:持续缓慢:应用程序一直特别慢。改变环境因素(负载、数据库连接数量)对整体响应时间的改变很小。
随着时间推进越来越慢:随着时间推进越来越慢:系统运行时间越长(负载相对均衡不变的情况下),就变得越慢。有可能是(最后)达到了某个阈
值,系统被锁定或者由于大量错误而崩溃。
随着负载增加越来越慢:随着负载增加越来越慢:每增加一个额外用户,应用程序就变得越慢。如果用户离开系统,系统就“冷却下来”,恢复正
常。
零星的挂起或者异常错误:零星的挂起或者异常错误:偶尔(可能由于负载或某些其它原因),在页面无法完成或者出现追踪到异常和堆栈的错误页
时,用户会看到挂起的情况。挂起的数量可能不同,但总是无法完全消除,甚至在强化 (“burn in”) 期间之后也是如此。
可以预见的锁定:可以预见的锁定:首先出现一些挂起或错误,然后加速出现,直到系统完全被锁定。通常这些问题可以通过“重新启动
来管理”的方式解决。
突然混乱:突然混乱:系统一直运行正常,相当一段时间里(可能一个小时,也可能是三天)性能都还差强人意,但是“突然某个时
候,根本没有任何原因的”,系统开始出现大量错误,或者被锁定。
为什么问题诊断如此复杂? 为什么问题诊断如此复杂?
对于 WebLogic 应用程序的某个具体应用模式来说,没有既定的公式可以用来推导出它的性能(在严格的实时工程当中,速
度单调分析这类技术确实可以做这项工作,但是在本文里还是让我们忘记它吧)。网络上是否存在另外一个系统正在密集使用
一个共享的后端服务,对于实际产生的性能有很大影响。性能也许还取决于 JDBC 驱动程序版本和数据库的正确匹配。也许
开发人员三年前写的一些代码恰巧在这个时候才出现特定类型的异常,而您急切需要的解决问题回馈,却恰恰包含在这个异
常里。
从本质上说,典型业务系统的性能是由成千上万交互的变量和决策共同作用的结果。就像人体一样,有太多连锁着的部分
和过程,所以很难理解系统的整体。因此我们进行了简化,并求助于拱形模式。
疾病疾病
您看到的症状的根本原因是什么?它是初级流行性感冒或者是肺炎的开始吗?是应用程序内部的底层问题还是它所在的
JVM 外部的问题?请参阅表 1 中应用程序性能低下的一些最常见原因。
表1