急性者的 WebSphere 优化:如何通过 20% 的工作获得 80% 的性能改善-1
- UID
- 1066743
|
急性者的 WebSphere 优化:如何通过 20% 的工作获得 80% 的性能改善-1
引言如果您是这样一个人:启动并运行 WebSphere® Application Server 后就忙着处理其他事情,而没有时间研究与性能优化相关的文档(请参阅)。那么,您来对地方了——本文旨在帮助您确定可能带给您 80% 性能改善的 20% 的性能更新。本文重点介绍 WebSphere Application Server base 产品——下一篇文章将介绍 WebSphere Application Server Network Deployment。
应用程序基础设施中的优化带来的性能改善不能与修复编得很差的应用程序所获得的显著性能改善同日而语。 一些应用程序在其数据库查询中没有 where 子句;一些应用程序调用了 wait() forever;一些应用程序构建了死锁生成器;一些应用程序拥有庞大的 HTTPSession;一些应用程序执行了 select * 并试图将所有数据缓存到中间层中(有千兆的数据也那么干!)。本文将向您介绍一些很好的优化技巧,但只有应用程序本身可以带来真正显著的结果。是的,这意味着应用程序开发人员和服务器管理员必须定期相互沟通!
本文涵盖以下内容:
- 性能测试环境
- 环境卫生
- 获得性能基准数
- 优化记录/日志
- CPU 使用率
- 内存使用率
- 其他环境因素
- 实现 Jython 经验优化
- JVM 冗余垃圾回收 (GC)
- JVM 设置
- 连接池设置
- 启用 Servlet 缓存
- Web 容器线程池
- 高级优化思想:SpecJ 全面披露
性能测试环境找出薄弱环节您需要一个尽可能反映生产环境的测试环境。如果您使用的是几千兆的数据仓库,则测试系统可能需要小一些。但是性能和生产环境之间的任何差异都可能引起高开销的推断错误。大型企业没有任何理由宣称它们无法提供同等规模的性能测试服务器。小测试环境可能无法暴露某些方面(例如锁操作、日志记录、HTTPSessions、垃圾回收、连接池、CPU、内存、数据库、网络或应用程序)现有的问题。
测试工具——找准方向创建实际测试工具是有效优化的关键步骤。如果您在测试服务器上施加的工作负载无法反映出站点中实际发生的情况,则您的优化将无法解决问题!有很多开放源代码的软件测试产品和商业软件测试产品(请参阅下面的)。您可以通过查看现有的服务器日志来了解实际测试场景。当引入新的应用程序时,这些历史记录对您是没有帮助的,所以必须有最好的设想。
测试工具——打破极限优化旨在发现问题并修复它们。如果测试没有使服务器负载达到临界点,则有些问题将检测不到,所以要确保服务器的负载超过您预期的最高峰流量。这样做将使您获得测试工具定义中的误差幅度。优化最差情况下的负载,这样您在投入生产时就已经拥有更高负载下的性能值。于是,您将知道您的安全幅度有多大以及什么时候需要为非常流行的应用程序进行扩容。应用程序的创建者不应该开发测试工具,因为他们知道假定的边界条件,会有意避免创建超出这些边界的测试用例。生产工作负载可没有这么友善!
一些测试提供的用户数是适度增长的,从而生成相当线性化的性能曲线图。但是实际的用户到达率往往是集群化且不规则的,所以在投入生产环境之前需要对这些条件进行测试。
如果您的测试计算机上有其他用户,则他们必须知道您的测试计划——否则他们可能认为他们遭遇某种严重的问题,例如拒绝服务攻击。
本文所使用的测试环境本文中的结果来自 IBM 培训计划,它使用 WebSphere Trade6 内部基准来训练学员在高压竞争环境下进行性能优化。该测试环境使用 Red Hat Enterprise Linux® V3、WebSphere Application Server V6.0.1、DB2® V8.2 和 Apache JMeter。这些产品将安装在 VMWare V5.0 下。两台 IBM ThinkPad® 便携式计算机使用以太网交叉电缆相连接。应用服务器运行在一台计算机上,而测试工具和数据库运行在另一台计算机上。
为了简化性能优化环境和降低出现错误的可能性,您应该使用 shell 脚本来启动不同的组件。下面的清单 1 显示了一个名为 go_trade6 的示例脚本。该脚本从端到端启动基准,包括 WebSphere Application Server、DB2 服务器、JMeter 程序和用于监控 top 和 vmstat 的 xterm。
清单 1. 启动测试环境所有组件的脚本1
2
3
4
5
6
7
8
9
10
11
12
13
| xterm -exec top &
xterm -exec vmstat 3 &
su - -c db2start db2inst1
#su - -c oninit informix
startWAS
mozilla &
# start test harness
cd /root/trade6/jakarta-jmeter-2.0.2/bin
/opt/IBMJava2-141/bin/java ApacheJMeter.jar -t tradebuysell.jmx &
# read wastecpu.c
wastecpu &
wastecpu &
export PATH=$PATH:/opt/IBM/WebSphere/AppServer/bin
|
|
|
|
|
|
|