二、从哪些方面入手优化
虽然一些性能监测和优化专家会试图让你相信某个企业应用的性能瓶颈或者在于应用本身的代码,或者在于应用服务器,但实际上,性能与这两者都有着密切的关系。应用的代码写得再好,如果应用服务器的配置不当,性能也不会好;同样地,应用服务器调整得再好,也难以掩盖应用代码中存在的缺陷。因此,首先要保证应用有一个稳固可靠的体系结构,有最优质高效的代码,在此基础上再来集中精力调整应用服务器。
■ 应用
就优化性能而言,应用本身的优化属于最艰巨的步骤之一。首先要深入地分析业务逻辑,然后找出满足业务需求的非常受欢迎的解决方案。每一个业务领域都有其与众不同的特点,因此也不存在适用于所有业务领域的功能较多解决方案。然而,人们在实践中总结出了许多优秀的设计模式,在规划应用的体系结构时合理选用设计模式对性能大有好处。
■ 应用服务器
选择应用服务器需要考虑许多因素,至少包括:应用服务器的价格,硬件部署,应用服务器厂商的表现,性能,等等。本文后面的讨论主要针对下面四种服务器:BEA WebLogic 7,IBM WebSphere,Oracle Application Server,JBoss。
■ 平台:硬件和JVM
应用开发完毕、服务器选定之后,还要考虑操作系统和Java虚拟机的配置选项,适当地调整这些选项无疑也能够提高性能。
■ 后端资源
许多J2EE应用需要访问后端资源,例如关系数据库。虽然后端资源的优化已经超出了J2EE的领域,但它决不是一个可以忽略的问题。即使应用在其他方面都做得很好,如果后端数据库总是迟迟不能响应,应用的整体性能必将大受影响。
三、优化方法
虽然我也希望能够告诉你:优化J2EE环境很简单,只需要把某几个参数调整到特定的值,一个小小的表格就足以把这些值全部列出。遗憾的是,实际问题要复杂得多,优化J2EE性能不仅要深入理解应用本身,而且还要掌握用户使用该应用的方式。下图展示了完整的优化过程。
第一个必须考虑的因素就是用户,我们必须先回答下列问题:用户会怎样使用这个系统?根据问题的答案可以定义出一组要求系统执行的事务(在这里,“事务”这个概念是指用户发出的一系列请求)。注意这些事务必须能够典型地代表最终用户的操作行为,因为我们将根据这些事务的执行情况来调整系统!
接下来,我们要在负载测试工具之内生成这些事务。负载测试工具能够控制并发用户数量、考虑时间、启动延迟等因素。
模拟大量用户的操作方式对应用进行测试时,应当获取应用本身、应用服务器、底层平台、外部资源的运行时性能指数。最后,有了这些性能指数之后,还必须对这些数据进行对比、分析和解释。
四、应用
每一个应用都是不同的:响应用户请求的服务步骤不同,与后端资源的交互方式不同,业务需求也不同。例如,考虑一个合作伙伴通过Internet发送和处理交易请求的应用,其核心事务显然应该是收取交易请求,将交易请求提交给数据库,最后返回回执。相比之下,电子商务Web网站的核心事务就不同了,它的核心事务应该是提供一个可购买产品的目录,维护购物篮,以及处理购买信息。
既然所有应用都是不同的,那么它们使用应用服务器资源的方式也不同,必须针对应用的具体情况指定不同的应用服务器配置。优化性能过程中最为重要的一个步骤就是:深入理解业务需求,定义一组精确反映最终用户操作方式的典型事务。如果这一步没有做好,很难指望应用会在实际运行环境中有好的表现。