本书主要讲述如何构建高性能的WebSphere企业级应用系统,在阐述与性能相关的概念的基础上,重点介绍作者在开发、测试和维护WebSphere应用系统过程中为提高系统性能所进行的探索,以及在解决实际性能问题过程中所积累的经验。
全书由三部分组成,第一部分综述篇介绍构建高性能WebSphere企业级应用的基本原理和相关概念。第二部分技术篇以WebSphere企业级应用的整个生命周期为主线,从架构、设计、开发、测试等多个环节来介绍与性能相关的理论和经验。第三部分实践篇分专题通过实例讨论如何解决WebSphere企业级应用中几个常见的性能问题,以及由此总结出来的提高系统性能的方案。
本书适用于有一定WebSphere应用开发、测试和系统维护项目经验的人员,也可以作为高等院校计算机相关专业学生的教学参考书。
目 录
第1部分 综述篇
第1章 性能与WebSphere企业级应用 2
1.1 WebSphere企业级应用 3
1.1.1 WebSphere应用 3
1.1.2 企业级应用 4
1.1.3 电子商务应用 5
1.2 性能问题 7
1.2.1 一个虚构的场景 7
1.2.2 性能问题的现象 9
1.2.3 性能问题的影响 12
1.2.4 性能相关概念 13
1.3 构建高性能WebSphere应用 15
1.3.1 WebSphere应用性能影响因素 15
1.3.2 性能与应用系统的生命周期 17
1.3.3 构建高性能应用的角色与任务 18
1.4 小结 20
第2章 基本性能指标与性能模型 21
2.1 性能指标 22
2.1.1 负载指标 22
2.1.2 运行指标 24
2.1.3 资源占用指标 29
2.1.4 各指标之间的关系 30
2.2 理论分析 36
2.2.1 理论模型与实际问题 36
2.2.2 实例分析:漏斗模型 40
2.3 缓存技术与性能模型 42
2.3.1 提升系统性能的途径 42
2.3.2 WebSphere动态高速缓存技术 44
2.3.3 动态高速缓存性能模型 46
2.3.4 WebSphere 6.1对动态高速缓存的改进 49
2.4 小结 50
第2部分 技术篇
第3章 WebSphere应用性能规划 52
3.1 性能规划的一般过程 53
3.1.1 理解应用环境 53
3.1.2 系统负载分析 55
3.1.3 软件结构中的性能设计 57
3.1.4 硬件结构中的性能设计 58
3.2 拓扑结构设计 59
3.2.1 WebSphere应用拓扑结构 59
3.2.2 实例分析:电子商务应用拓扑结构设计 61
3.3 系统容量规划 63
3.3.1 容量规划的范围 63
3.3.2 CPU容量规划的理论模型 66
3.3.3 实例分析:电子商务应用容量规划 67
3.4 小结 73
第4章 WebSphere高性能编程 74
4.1 MVC结构与高性能编程 75
4.1.1 MVC结构 75
4.1.2 电子商务应用分层结构 76
4.1.3 提高性能的一般原则 78
4.2 控制层 80
4.2.1 一般性建议 80
4.2.2 电子商务应用最佳实践 81
4.3 模型层 82
4.3.1 一般性建议 83
4.3.2 电子商务应用最佳实践 89
4.4 视图层 94
4.5 其他最佳实践 96
4.5.1 内存使用 96
4.5.2 数据软删除 100
4.5.3 缓存与滞后取 102
4.5.4 数据库编程 104
4.6 小结 106
第5章 WebSphere应用性能测试 107
5.1 性能测试概述 108
5.1.1 性能测试的一般方法 108
5.1.2 性能测试的一般流程 110
5.2 电子商务应用性能测试 112
5.2.1 制定测试计划 112
5.2.2 执行测试 119
5.2.3 管理测试资产 128
5.2.4 常见问题处理 131
5.3 性能测试工具 134
5.3.1 常见性能测试工具 134
5.3.2 选择负载测试工具 138
5.3.3 测试工具发展趋势 139
5.4 小结 140
第6章 企业级应用性能监视 141
6.1 性能监视概述 142
6.1.1 监视对象与监视策略 142
6.1.2 监视级别 145
6.2 操作系统监视 146
6.2.1 nmon 146
6.2.2 top和topas 151
6.2.3 vmstat和iostat 152
6.2.4 typeperf 154
6.2.5 zVM监视 155
6.3 WebSphere应用服务器监视 156
6.3.1 Tivoli性能查看器 156
6.3.2 高速缓存监视器 159
6.4 数据库服务器监视 162
6.4.1 DB2性能监视 163
6.4.2 Oracle监视 171
6.5 生产环境性能监视 173
6.5.1 Tivoli产品家族 173
6.5.2 ITCAM监视工具 174
6.6 小结 179
第7章 性能问题分析与诊断 180
7.1 性能问题诊断的一般过程 181
7.1.1 自顶向下分析与自底向上分析 181
7.1.2 电子商务应用的问题诊断过程 183
7.2 WebSphere应用日志分析 184
7.2.1 Web服务器日志 185
7.2.2 应用服务器日志 187
7.2.3 数据库服务器日志 190
7.2.4 日志分析工具 191
7.3 WebSphere应用程序运行剖析 194
7.3.1 Heap分析 194
7.3.2 JInsight 195
7.3.3 TPTP分析平台 196
7.3.4 ITCAM 200
7.4 小结 200
第8章 WebSphere应用性能参数调优 201
8.1 参数调优概述 202
8.1.1 一般过程 202
8.1.2 基本原则 204
8.1.3 参数调优与性能测试 205
8.2 电子商务应用经验参数 207
8.2.1 操作系统调优参数 207
8.2.2 Web服务器调优参数 215
8.2.3 数据库服务器调优参数 222
8.2.4 应用服务器调优参数 232
8.2.5 硬件配置 240
8.3 性能参数调优实例介绍 241
8.4 小结 247
第3部分 实践篇
第9章 死锁问题实例分析 250
9.1 死锁的原理 251
9.1.1 抽象死锁原理 251
9.1.2 DB2锁管理机制 253
9.2 死锁问题处理的一般过程 255
9.2.1 发现死锁 255
9.2.2 解决死锁 262
9.3 常见死锁问题处理实例 264
9.3.1 RUNSTATS 264
9.3.2 缺少索引 266
9.3.3 SQL语句不合理 268
9.3.4 资源访问顺序问题 271
9.3.5 隔离级别问题 272
9.3.6 意外更新记录 274
9.4 小结 278
第10章 内存使用问题实例分析 279
10.1 WebSphere内存管理 280
10.1.1 Java虚拟机与垃圾回收机制 280
10.1.2 WebSphere应用中的JVM内存管理 282
10.2 WebSphere内存问题分析 284
10.2.1 内存问题分析的一般过程 284
10.2.2 垃圾回收分析工具 288
10.3 常见内存问题实例 290
10.3.1 JVM堆大小问题 291
10.3.2 固定对象问题 292
10.3.3 大对象问题 294
10.3.4 缓存大小问题 297
10.3.5 内存泄漏问题 299
10.4 小结 300
第11章 性能下降问题实例分析 301
11.1 性能下降问题 302
11.1.1 常见现象和产生原因 302
11.1.2 分析和解决过程 304
11.2 自顶向下分析实例 308
11.2.1 问题背景 308
11.2.2 自顶向下分析过程 309
11.3 数据库引起的性能下降问题实例 313
11.3.1 问题背景 313
11.3.2 分析与解决过程 314
11.4 小结 324
第12章 动态高速缓存实例分析 325
12.1 动态高速缓存设计 326
12.1.1 基本缓存策略 326
12.1.2 整页缓存与片段缓存 327
12.1.3 命令缓存 330
12.1.4 磁盘缓存 331
12.1.5 外部缓存 333
12.1.6 失效处理 335
12.1.7 缓存复制 336
12.2 实例分析:B2C网站动态高速缓存的设计与实现 338
12.2.1 缓存需求分析 338
12.2.2 整页缓存:产品目录页 339
12.2.3 片段缓存:迷你购物车 342
12.2.4 命令缓存:组织查询 345
12.2.5 缓存配置参数设计 347
12.2.6 缓存部署与验证 349
12.2.7 缓存预加载机制 352
12.3 动态高速缓存常见问题处理 352
12.3.1 页面内容重复 353
12.3.2 缓存内容错误 353
12.3.3 JVM内存不足 354
12.3.4 磁盘I/O导致性能下降 355
12.4 小结 357
附录A 测试工具介绍 358
附录B 操作系统监视工具介绍 373
附录C 动态高速缓存辅助资料 391
参考文献 417
术语表 418
写作背景
近年来,基于WebSphere中间件技术的企业级应用在国内如雨后春笋般增加。时至今日,WebSphere系列产品已经发展到第6版,自身技术已经相当成熟。随着介绍WebSphere开发的中文书籍和资料越来越丰富,开发及部署基于WebSphere的应用系统早已不是一件非常困难的事情。然而,随着企业规模和业务负载的不断增长,已部署应用的性能问题日渐突出,以至于成为企业发展的瓶颈。在国内各大WebSphere开发论坛上,经常可以看到关于WebSphere应用性能问题的求助话题。
本书的几位作者是IBM中国开发中心的软件工程师,专门从事基于WebSphere企业级应用的开发、测试和维护工作。其参与开发的WebSphere企业级应用在国内外均有非常大型的部署案例,所部署应用在性能方面的表现也获得过用户的高度认可。作者在提高WebSphere企业级应用性能方面积累了丰富的经验。因此,作者非常希望能为国内的WebSphere开发和维护人员提供一些帮助,解决他们所遇到的系统性能问题。
对于撰写一本书来专门讨论WebSphere企业级应用可能涉及到的性能问题,作者一直心存顾虑,迟迟未能下笔。一方面,讨论WebSphere应用性能相关话题的书籍和资料已经很多(虽然以英文为主),作者不想炒冷饭;另一方面,作者开发的应用系统毕竟只是一种类型的WebSphere企业级应用,并不能涵盖WebSphere中的所有企业级技术。
最终,是电子工业出版社博文视点公司和IBM中国开发中心的联合出版活动促成了本书的出版。出版社领导的热情鼓励给了作者以信心,而IBM中国开发中心总裁郑妙勤女士所倡导的“理论联系实践”的指导方针为本书指明了写作方向。作者最终决定将本书定位为经验分享,将产品和项目中经历的实际心得体会带给读者。
本书结构
本书作者认为,尽管目前讨论WebSphere应用性能相关话题的资料很多,但大部分是针对系统中的某个特定的部分(如数据库服务器)或某个特定的问题(如性能测试)而言的。而WebSphere企业级应用系统是一个由软硬件组成的复杂系统,整个系统的性能由多种因素所决定。读者很难在复杂的实际工作中直接套用一些片面的性能优化准则或最佳实践来解决所遇到的性能问题。因此,在本书中,作者以自身实际参与的WebSphere电子商务应用系统为背景,重点讨论在构建高性能WebSphere企业级应用过程中,各个环节可能遇到的性能问题及其解决方案。
本书在内容组织上注重理论联系实际,以实践经验分享为主。对于各种提高性能的原则或工具,重点介绍作者在实际开发、测试和维护工作中的具体使用经验,即作者在实际工作中的做法,以及为什么这样做。在不影响内容完整性的前提下,本书力图淡化对原理和知识点的一般性描述。
本书属于针对WebSphere开发的中高级技术书籍,要求读者具备一定的开发和维护WebSphere应用的基础知识和实际操作经验。因此,本书读者为WebSphere应用系统的开发人员、测试人员、实施人员和系统维护人员。同时,本书也可以作为高校网络应用系统开发课程的教学参考书。
本书的内容分为三部分:综述篇、技术篇和实践篇。
第1部分综述篇介绍高性能WebSphere企业级应用的基本原理和相关概念。这一部分包括以下两章。
第1章界定本书讨论的范围。包括什么是WebSphere企业级应用,作者参与的电子商务应用的背景,性能问题的相关概念,构建高性能应用的整个生命周期,以及相关的角色和任务。
第2章讨论性能指标的定义和如何进行理论模型分析。通过讨论一些相关的性能指标和性能模型,本章力图使读者意识到理论分析对解决复杂性能问题的重要性,并对后续章节所使用到的模型分析进行铺垫。
第2部分技术篇的内容按照构建高性能WebSphere企业应用的整个生命周期进行组织。每章介绍一个与性能相关环节有关的问题及处理经验。既包括对一般原理的介绍,也涉及在实际问题处理中的一些经验总结和技巧分析。这一部分包括以下6章。
第3章介绍如何在系统构建初期为应用系统的性能进行合理的规划,包括如何确定系统的性能需求,并根据这些性能需求确定系统的软硬件结构。
第4章介绍如何在程序开发阶段改进系统的性能。本章将提供一些从作者的实际WebSphere应用开发中总结出来的最佳实践和技巧。
第5章介绍对WebSphere应用系统进行性能测试的方法。测试是整个软件生命周期的重要环节,性能测试是评估系统性能、发现性能问题并最终提高系统性能的重要途径。本章将介绍对实际的电子商务应用进行性能测试的做法及原理。
第6章介绍如何对WebSphere应用系统进行性能监视。监视是跟踪系统运行良好状态的重要途径,也是系统管理员日常工作的重要内容。在介绍理论的基础上,本章将以具体监视任务为例,介绍一些常见的性能监视工具的使用心得和技巧。
第7章介绍性能问题的分析和诊断方法。当性能问题出现之后,问题的分析和诊断是能否最终解决问题的关键环节之一,而这个环节又和其他环节(测试,监视,调优等)密切相关。本章将重点介绍日志分析与程序运行剖析。
第8章介绍WebSphere应用系统性能参数调优的方法。调优是系统管理员日常工作的另一项重要内容。许多性能问题并不需要修改软件代码,通过参数调优就可以解决。反过来,没有进行正确参数调优的系统,单纯优化软件代码也并不一定能得到满意的结果。本章将介绍参数调优的一般过程,并根据作者在电子商务应用中的调优经验,介绍一些关键调优参数的参考配置方法。
第3部分实践篇分专题重点讨论构建WebSphere企业应用中的几个常见性能问题和相应的解决途径。通过对这几个专题的实例分析,可以加深读者对第二部分中介绍的各个环节所涉及的原理与经验的理解与掌握。这一部分包括以下4章。
第9章介绍死锁问题。死锁是数据密集型应用系统的常见问题。本章将通过实例来介绍系统出现死锁问题的常见原因,以及相应的解决方案。
第10章介绍内存使用问题。内存使用问题常常导致严重的性能问题。本章将介绍包括内存碎片和内存泄漏在内的一些典型的内存使用问题,并针对每一类问题介绍实际问题的现象、问题产生的原因,以及分析处理过程。
第11章介绍性能下降问题。性能下降问题产生的原因很多,本章将根据作者在分析和处理实际应用中积累的解决系统性能随时间下降问题的经验,总结一套解决类似问题的方法。
第12章介绍动态高速缓存的使用问题。使用动态高速缓存是提高WebSphere应用系统性能的重要方法之一。然而,正确使用动态高速缓存并不是一个非常简单的过程。本章将通过实例介绍如何设计和实现动态高速缓存,以及如何处理不恰当的缓存使用带来的性能问题。
本书的三部分内容是一个密切联系又相对独立的整体,基本上是按照从理论到实践的顺序进行组织的。读者可以根据自己的需要直接阅读某个章节。比如,有经验的系统管理员可以在简单浏览第1章后跳到第二部分阅读第6章和第8章。但是作者认为,构建高性能WebSphere企业应用系统是一个完整的过程,了解这个过程各个环节的原理对于正确分析和处理性能问题,并最终解决性能问题是非常必要的。在时间允许的情况下,作者建议读者完整地阅读第一部分和第二部分内容,然后,对第三部分的实例分析,根据需要,有选择地阅读以加深对前两部分的理解。
本书中的大部分例子基于WebSphere应用服务器6.0版本,另有一小部分基于WebSphere应用服务器6.1版本。实例中如果没有特殊说明,对应WebSphere应用服务器的版本均为6.0。实际上,本书介绍的大部分原理和技巧与WebSphere应用服务器的具体版本无关。读者完全可以根据自己的理解,在不同的WebSphere应用服务器版本中,应用相关原理和技巧。
致谢
本书是集体创作的结晶,首先感谢每一位作者的辛勤工作。本书的写作占用了各位作者大量的休息、娱乐,以及和家人在一起的时间,所以,在此感谢各位作者家人的理解和支持。
其次,感谢IBM多伦多实验室的WebSphere应用专家James Tang、Robert Dunn、Alex Shum提供相关资料及建议;感谢IBM中国开发中心的架构师王紫瑶、周彬、姜斌等审阅本书的内容,并提供宝贵的修改意见。
在本书成书的过程中,笔者得到各位领导的关怀、鼓励和支持,其中包括IBM中国软件开发中心总裁郑妙勤女士、经理主管沈政芳先生、开发经理王克非先生和孙清涛先生等,在此一并表示感谢。
最后,感谢出版社的有关领导、协调人员及编辑,没有他们的支持和参与,本书不可能顺利出版。
由于时间仓促,作者水平有限,书中难免有许多不妥甚至错误之处。在此,敬请读者不吝指出,作者非常愿意与读者共同探讨,并不胜感激。
无封面