使用 WebSphere Application Server 执行性能测试和分析
内容
简介
性能测试的重要作用
合适的性能测试的最佳实践
测试案例和负载驱动程序
DayTrader 示例
使用 JMeter
运行测试
分析结果
性能工具
垃圾收集分析
方法探查分析
锁定分析
结束
IBM® WebSphere® Application Server 支持的应用程序越来越多,每个应用程序都具有其自己的独特功能、需求和服务集合。对这些应用程序中的每一个执行合适的性能测试和分析,对确保它们以最高性能执行至关重要。本文提供一些有关如何构建性能测试、对比不同应用或环境更改的结果,以及如何使用免费的 IBM 工具识别瓶颈的最佳实践指南。这里介绍的方法适用于所有 WebSphere Application Server 版本,包括新发布的 WebSphere Application Server V8.5。
简介
您能将任何这些陈述联系起来吗:
目前我们还未做任何性能测试。我们想做,但不确定从何处入手。
我们的应用程序运行得很好,但在开发团队发给我们一个更新版本用于部署后,我们在服务器上体验到了高得多的 CPU 使用率。高 CPU 使用率缘何而来?
我们将应用程序从 2.0 版迁移到了 3.0 版,现在响应时间是以前的 3 倍。是什么导致了这些延迟?
我们的应用程序需要在接下来的 3 个月支持超过 40% 的用户。除了简单地向集群添加更多机器,我们还能为此准备什么?
这些陈述代表着非常常见的场景,所以如果听到任何这些熟悉的声音,那么您并不孤单。本文的目标是解决这些类型的情景,提供一些有关执行测试的基本过程和可用的适用工具的一些最佳实践建议。总体来讲,这里讨论的主要主题将帮助您:
• 编写有用的性能测试案例。
• 驾驭不同的负载量以降低和提高利用率。
• 激励关键性能和系统指标。
• 与应用程序开发周期并行地执行性能测试。
• 使用 IBM Health Center 等工具查找性能瓶颈。
• 与开发团队合作修复瓶颈并重新度量。
性能测试的重要作用
曾几何时,性能测试被视为在部署到生产之前才做的事情。它常常只有非常少的工作量,没有分配足够的时间来识别和修复最终将在生产环境中出现的真实问题。要执行合适的性能测试,一种普遍推荐的方法是实现
性能生命周期,其中性能测试计划为开发工作的一部分,集成了迭代式测试作为新功能。这能够在将所有功能部署到生产环境之前,就能够很早地识别出瓶颈,并解决这些问题。
合适的性能测试的另一个好处是有机会调节环境(操作系统、JVM、应用服务器、应用程序和数据库等)以实现最大性能。只有通过合适的性能测试,才能调节所评估的参数以确定它们是否提供了任何价值。许多用户基于开发人员建议来设置 JVM 堆大小,不会调节其他任何参数,因为这被认为没有必要。您可能会很惊奇,只需执行一些简单的调节步骤,即可将为调节的环境所需的硬件量减少一半。本文将证明这一点。
使用一些简单的调节过程,DayTrader 性能基准测试应用程序可处理两倍于未调节环境的负载。这意味着相同数量的用户可能只需使用一半的可用硬件资源即可支持。想想这能够节省的成本。
除了在整个开发周期执行迭代测试和用于调节用途的测试优势,广泛性能测试的另一个主要优势是,能够对比不同应用程序和环境改变的结果。真实的性能测试会记录关键指标,使管理员能够洞察可能出现的问题(稍后将讨论)。回到上面的一种常见评论,许多用户在迁移到更新的应用程序版本时,都未准备好找出问题的根源,因为他们从未对以前的版本执行合适的性能测试或记录关键系统指标。缺少此工作,具有更糟的应用程序版本的测试服务器可能需要设置为一个对比点。有了此类型的数据,就可以容易得多地分析性能降级来自何处。
合适的性能测试的最佳实践
有两条基本的合适性能测试最佳实践,它们可总结如下:
• 改变用户(或客户端负载)数量。一个生产环境通常在一天之内具有不同数量的活动用户。质量测试可确保应用程序在小负载和峰值(例如黑色星期五)负载下良好地执行。这可能意味着请求之间的 “思考” 时间的更改和使用应用程序的活动用户数量的更改。这么做的一种最佳方式是对 1 位活动用户、2 位用户、4 位用户、8 位用户等执行测试。您稍后将看到此方法的实际应用。
• 记录关键系统和性能指标。应该为所有场景记录一些重要的指标。对于每次性能运行,要记录的最重要指标是:
◦ 吞吐量(每秒请求数)
◦ 响应时间
◦ 应用服务器机器 CPU 利用率 %
◦ 其他机器 CPU 利用率 %,如 Web 服务器、负载驱动程序和数据库(如适用)
只要使用了负载驱动工具,就可以看到吞吐量和响应时间指标。对于 CPU 利用率、内存利用率、磁盘 I/O 和网络流量指标,可以使用 Linux® 或 AIX® 上的 vmstat 或 nmon 工具进行查看,或者使用 Windows® 上的任务管理器进行查看。除了上述指标之外,记录所有系统级信息也很重要。这包括操作系统级别、活动核心数量、可用内存 (RAM) 量、“Java™ 版本” 输出、WebSphere Application Server 版本信息,以及所有已应用的调节。记录所有这些指标使您能够迅速对比不同场景,即使对比的场景的测试时间已相隔两年。
许多用户没有可用于再现与测试环境大小相同的生产环境的硬件。在这些情况下,推荐的方法是基于可用的资源来扩展性能测试。例如,假设一个生产环境包含 10 个物理机器,每个机器运行两个 WebSphere Application Server 实例。如果一个物理机器都可用于性能测试工作,那么此机器可设置为与生产机器尽可能相同,并且性能测试中使用的负载将大约为预期生产工作负载的 10%。最终,应该扩展性能测试,以再现完整的生产环境。这样,其他流程(比如数据库和 LDAP)的负载也会进行测试。
测试案例和负载驱动程序
执行性能测试和查找应用程序瓶颈的第一步是编写有用的测试案例。结果和分析取决于用于生成它们的测试案例,所以这一步不应轻率地执行。与对所有用户都将使用的代码路径执行压力测试相比,对用户仅花了不到 10% 的时间的应用程序代码路径执行压力测试的效果差得多。首先专注于最流行的代码路径,然后为更少利用的代码路径构建您自己的测试。在这里花一些时间真正创建一个模拟实际用户流量的高质量测试案例。这篇 developerWorks 文章
是帮助开始编写性能测试案例的一个不错的资源。
定义了测试案例概念之后,您将需要通过一个性能负载驱动工具将它应用于实践。有许多负载驱动程序可供选择,包括
IBM Rational Performance Tester
和 Apache 的开源
Jmeter。本文将使用后者。
DayTrader 示例
如果您之前阅读过 developerWorks 上的任何性能文章,那么您很可能已听说过 “Trade” 或 “DayTrader” 基准测试。Apache DayTrader Performance Benchmark Sample
应用程序模拟了一个简单的股票交易应用程序,它让用户登录/注销、查看他们的投资组合,查找股票报价,购买和销售股票,并管理帐户信息。DayTrader 不仅可用作功能测试的出色应用,还提供了一组标准的工作负载集来描绘和度量应用服务器和组件级性能。
DayTrader 构建于一组核心的 Java EE 技术之上,包括用于表示层的 Java servlet 和 JavaServer™ Pages (JSP),以及用于后端业务逻辑和持久性层的 Java 数据库连接 (JDBC)、Java Message Service (JMS)、Enterprise JavaBeans (EJBs) 和消息驱动的 bean (MDB)。图 1 给出了该应用程序架构的总体概述。
图 1. DayTrader 应用程序概述
IBM 发布了一个样例
DayTrader 包
供下载,它包含 DayTrader 应用程序和所需的部署描述符,可以将它们安装在 WebSphere Application Server V7.0 或更高版本上。
在此示例中,将 DayTrader 样例应用程序部署成了 WebSphere Application Server V8.5 的一个基本实例。一个简便的 DayTrader 功能是
Configuration
选项卡下的
TradeScenarioServlet
链接。它会链接到模拟一群 Web 用户的一个 servlet,为每个访问该 servlet 的用户随机生成具体的 DayTrader 操作。(例如,一个用户可查看他的投资组合、一个用户可执行股票购买操作,一个用户可查找一个股票报价等)。这可确保 DayTrader 中的每个主要操作都会在测试期间执行,因为它是随机的,所以一段时间后每个操作都应执行大体相同的次数。有许多参考资料介绍了如何使用 JMeter 编写非常复杂的性能测试,其中可为每个操作指定使用的准确次数和使用顺序,但出于本文的用途,测试案例将会保持相对简单并使用此 TradeScenarioServlet。
使用 JMeter
设置 Jmeter 并运行它来执行性能测试:
1. 安装 Jmeter。指向您的
java
目录,使用
jmeter.sh
或
jmeter.bat
脚本从 <JMeter_Home>/bin/ 目录启动 JMeter。您应看到一个类似图 2 的面板。
图 2. JMeter 默认试图
2. 右键单击
Test Plan
并转到
Add > Thread Group。这是您定义要处理其负载的用户数量的地方。对于初学者,使用以下值(参见图 3):
◦ 线程(用户)数量:1
◦ 循环数量:Forever
3.
图 3. JMeter Thread Group 视图
4. 右键单击您刚创建的线程组,转到
Add > Sampler。一个抽样器 (sampler) 定义您希望处理的负载类型。有针对 HTTP 请求、JMS 请求、Web 服务消息等的抽样器。JMeter 用户手册记录每个可用的抽样器。因为 DayTrader 支持基于 Web 的流量,所以此示例使用
HTTP Request。依据您的环境填写主机名、端口和路径的值(参见图 4)。
图 4. HTTP 请求
以下文章点击率最高
Loading…