| 作者:Steven Haines;编译:仙人掌工作室 前面一篇文章指出了性能优化的目的是提高应用支持的并发用户数量以及吞吐量、可靠性,优化的手段则应当是从应用、应用服务器、平台、外部依赖因素入手作系统地调整。无论是优化J2EE应用还是数据库、自定义的体系结构,最好的方法是先确定要采用的优化策略、分析该策略是否能够解决性能问题、确定实施该策略所需满足的前提条件。 一、优化方法 虽然我也希望能够告诉你:优化J2EE环境很简单,只需要把某几个参数调整到特定的值,一个小小的表格就足以把这些值全部列出。遗憾的是,实际问题要复杂得多,优化J2EE性能不仅要深入理解应用本身,而且还要掌握用户使用该应用的方式。下图展示了完整的优化过程。 图2-1:调整性能因素的方法概览 第一个必须考虑的因素就是用户,我们必须先回答下列问题:用户会怎样使用这个系统?根据问题的答案可以定义出一组要求系统执行的事务(在这里,“事务” 这个概念是指用户发出的一系列请求)。注意这些事务必须能够典型地代表最终用户的操作行为,因为我们将根据这些事务的执行情况来调整系统! 接下来,我们要在负载测试工具之内生成这些事务。负载测试工具能够控制并发用户数量、考虑时间、启动延迟等因素。 模拟大量用户的操作方式对应用进行测试时,应当获取应用本身、应用服务器、底层平台、外部资源的运行时性能指数。最后,有了这些性能指数之后,还必须对这些数据进行对比、分析和解释。 二、应用 每一个应用都是不同的:响应用户请求的服务步骤不同,与后端资源的交互方式不同,业务需求也不同。例如,考虑一个合作伙伴通过Internet发送和处 理交易请求的应用,其核心事务显然应该是收取交易请求,将交易请求提交给数据库,最后返回回执。相比之下,电子商务Web网站的核心事务就不同了,它的核 心事务应该是提供一个可购买产品的目录,维护购物篮,以及处理购买信息。 既然所有应用都是不同的,那么它们使用应用服务器资 源的方式也不同,必须针对应用的具体情况指定不同的应用服务器配置。优化性能过程中最为重要的一个步骤就是:深入理解业务需求,定义一组精确反映最终用户 操作方式的典型事务。如果这一步没有做好,很难指望应用会在实际运行环境中有好的表现。 三、负载测试 负载测试工具是一种能够模拟任意数量的用户与系统交互过程的工具,当前市场上已经有许多这类工具(参见本文后面的目录),虽然这些产品各有特色,但它们的核心功能不外乎: ◆ 能够针对应用系统执行用户定义的事务,保证适当的事务频度。 ◆能够控制负载测试中并发用户的数量。 ◆能够精确调整测试器在下列各方面的行为:两个请求之间用户的思考时间,上升到目标用户数量的速率。 大多数商业负载测试器还提供了一个“学习”引擎,它允许测试者手工执行事务,而学习引擎则在后台观察和记录测试者的动作。 总之,负载测试工具的目的是模拟实际运行环境中用户的操作方式。如果不能为应用定义一组典型的测试事务,就不能将应用精确地调整到最适合实际用户的状态。 四、需要哪些信息? 现在,我们已经有了模拟一系列并发用户的负载测试工具,每一个并发用户都能够运行典型地代表了应用使用情况的事务。接下来要做的是从应用和应用服务器获取运行时性能信息,包括: ◆应用服务器统计信息:内存使用情况,数据库连接使用情况,线程使用情况,等等。 ◆应用性能(内部):类和方法的响应时间,调用路径,异常方法,等等。 ◆应用性能(外部):负载测试器观察到的事务总量、构成事务的请求量。 ◆平台性能:CPU,进程,等等。 ◆后端资源性能:数据库性能,传统系统性能,等等。 (责任编辑:admin) |