正在寻找一个资源中心来调优 WebSphere® Portal Web Content Management 和 IBM® DB2® for Linux®, UNIX®, and Windows® 环境?本文描述该环境独特的、需要特殊考虑的各个部分。您将学习如何调优 Application Server 和 WebSphere Portal。作为良好的开端,您将学习一些应该设置为指定值的各种注册表变量和数据库管理器及数据库配置参数。最后,持续维护小节提供了如何使 DB2 系统随系统增长仍然高效运行的指导原则。
对环境进行性能调优
WebSphere Portal 环境的调优涉及到对该环境的不同的系统和组件的调优和配置。本节讨论一些通用的概念,并详细描述本文评测环境所使用的配置的特征。 WebSphere Portal Web Content Management (WCM) AIX® Power4 评测环境的配置和调优是基于 WebSphere Portal AIX Power4 环境的,IBM WebSphere Portal Version 6.0 Tuning Guide 对后者作了详细阐述。用于评测 WCM 的环境的所有不同之处在本章中都会明确提出。对任何 WebSphere Portal 环境的完整的调优和配置方法包括:
配置应用服务器和为这个应用服务器定义的资源
确定用于扩展环境的复制策略
调优数据库和数据库服务器
调优目录服务器和它的数据库
调优 web 服务器
调优操作系统和网络
调优 WebSphere Portal 服务
在调优各个系统时,首先应该具备一个基准,并监视性能指标,以确定是否应该更改某个参数,当作出更改时,也要监视性能指标,以确定更改的效果。
了解环境
WebSphere Portal V6.0 使用附加的服务器来提供其功能。在我的评测环境中,除了 portal 服务器本身以外,还有一个 Web 服务器,一个数据库服务器和一个目录服务器,这些服务器放在 WebSphere Portal 系统之外的单独的系统上。采用这种配置的主要好处是可以避免同一个系统上的多个服务器之间争用资源。如果其他服务器与 WebSphere Portal 服务器争用资源,就会影响系统可达到的吞吐率。在本报告中,用于评测的配置将 IBM HTTP Server 与 WebSphere Portal 放在同一个系统上。
应用服务器调优
在 WebSphere Application Server 中,应用服务器的配置和调优有很多方面。我发现,本文和 IBM WebSphere Portal Version 6.0 Tuning Guide 中描述的那些方面对于 WebSphere Portal 在我们的实验环境中正确、高效地运行非常关键。
根据我对于本文描述的工作负载的经验,表 1 展示了与用于 Power4 平台的 AIX 的 IBM WebSphere Portal Version 6.0 Tuning Guide 不同的一些配置:
表 1. 应用服务器参数
参数 | 设置 | 其他细节 |
Java™ Virtual Machine (JVM) 堆大小 | 1792 | 请注意,JVM 堆的大小与系统的物理内存的大小有直接的关系。永远不要将 JVM 堆大小设置为大于系统的物理内存大小。 请参阅 JVM 最大堆大小限制 |
JVM 堆大内存页 | -Xlp | 和 IBM JVM 一起使用,用于分配具有大内存页的堆。 请参阅 JVM 堆大内存页 |
kCluster and pCluster | -Xk30000 -Xp24000k,2400k | 固化簇。为类文件预先分配 JVM 堆,因为类文件一旦被装载,就固化在内存中。 请参阅 kCluster 和 pCluster |
JVM 最大堆大小限制
在为应用服务器设置堆大小时,要记住:确保系统有足够的物理空间,以便将所有进程装入物理内存,并满足操作系统需要。如果分配的内存大于系统的物理内存,就会发生分页,从而导致糟糕的性能。
我将堆大小的最小值和最大值设置为相同的值,对于在 IBM JDK 上运行的生产系统来说,这可能不是最佳选择。在我的评测中,系统承受负载的时间很短(大约 3 小时),并且运行的 portlet 的内存需求不大。如果使用内存需求较大的 portlet,或者要持续运行,那么通过将初始堆大小设置为 320 MB 可能会减少堆碎片。
对堆大小进行调优之后,要监视系统,以确保没有发生分页。如前所述,换页会导致糟糕的性能。
如何设置参数:
在 WebSphere Administrative Console 中,选择 Servers -> Application Servers -> WebSphere Portal -> Server Infrastructure: Java and Process Management -> Process Definition -> Java Virtual Machine
可以在下面两个地方更改堆大小:
- Initial Heap Size
- Maximum Heap Size
JVM 堆大内存页
该设置可以与 IBM JVM 一起使用,以使用大内存页分配堆空间。为支持大内存页,AIX 操作系统必须进行配置。使用大内存页可以减少跟踪堆所需的 CPU 开销。通过这样的调优,我的评测吞吐率提高了 10%。
如何设置参数:
在 WebSphere Administrative Console 中,选择 Servers -> Application Servers -> WebSphere Portal -> Server Infrastructure: Java and Process Management -> Process Definition -> Java Virtual Machine -> Generic JVM Argument
添加: -Xlp
在 WebSphere Administrative Console 中,选择 Servers -> Application Servers -> WebSphere Portal -> Server Infrastructure: Java and Process Management -> Process Definition -> Custom Properties -> New -> EXTSHM=OFF
(注意:当 EXTSHM 开启时,会阻止大内存页的使用。)
停止 Portal 服务器
配置 AIX,以支持大内存页。我使用以下步骤分配 1856 MB 的 RAM 作为大内存页(16MB)。之所以选择这个大小,是因为这些系统中有 4GB 的物理内存。对于采用不同物理内存大小的系统,这些值应有所调整。
vmo -r -o lgpg_regions=116 -o lgpg_size=16777216
bosboot -a
reboot -q
vmo -p -o v_pinshm=1
chuser capabilities=CAP_BYPASS_RAC_VMM,CAP_PROPAGATE $USER
重新启动 Portal Server。要确认是否正在使用大内存页,运行 AIX 命令 vmstat -l 1 5 并查看 “alp” 列,它是当前使用的活动大内存页。如果正在使用大内存页,那么它应该是一个非 0 值。
kCluster 和 pCluster
JVM 堆上的对象通常是移动的;也就是说,Garbage Collector(GC)在决定重排列堆时,可能会移动这些对象。但是,无论是永久地还是暂时地,有些对象是不能移动的。那些不能移动的对象被称作固化对象(pinned object)。
在版本 1.3.1 Service Refresh 7 及之前版本中,GC 首先在堆的底部分配一个 kCluster 作为第一个对象。kCluster 是一个存储区域,专门用于类块。它大到足以容纳 1280 个条目。每个类块长度为 256 字节。
然后,GC 分配一个 pCluster 作为堆上的第二个对象。pCluster 是用于分配固化对象的存储区域。它的长度为 16 KB。
当 kCluster 耗尽时,GC 将类块分配在 pCluster 中。当 pCluster 也耗尽时,GC 分配一个 2 KB 的新的 pCluster。
由于这个新的 pCluster 可以分配在堆中的任何位置,并且必须是固定的,因此可能导致碎片问题。固化对象使 GC 不能在堆压缩期间合并空闲空间,因而可能导致一个堆有很多容量较小的空闲空间,所以即使某次分配明显少于空闲空间总量,也不能成功分配。为解决这个问题,1.3.1 和更高版本的 SR7 提供了一些命令行选项,用于指定 kCluster(-Xk)、pCluster(-Xp)和 pCluster 的溢出大小(-Xp)。使用这些选项将簇的初始大小设置得足够大,以避免碎片问题。
如何设置参数:
在 WebSphere Administrative Console 中,选择 Servers -> Application Servers -> WebSphere Portal -> Server Infrastructure: Java and Process Management -> Process Definition -> Java Virtual Machine -> Generic JVM Argument
输入 -Xk30000 -Xp24000k,2400k
数据源调优
根据 WebSphere Portal 信息中心的描述,WebSphere Portal V6.0 使用多个数据库。在我的例子中,我使用 7 个独立的数据库,每个数据库都有它自己的数据源。这些数据源是:
表 2. 数据源名称
数据库 | 数据库名称 | 数据源名称 |
Release | release | reldbDS |
Community | community | commdbDS |
Customization | custom | cusdbDS |
Feedback | fdbkdb | fdbkdbDS |
Likeminds | lmdb | lmdbDS |
JCR | jcrdb | jcrdbDS |
Member Manager | wmmdb | wmmdbDS |
对于预置语句缓存大小,路径为 Resources -> JDBC Providers -> provider name -> Data Sources -> datasource name -> WebSphere Application Server data source properties。provider name 和 datasource name 随数据库迁移期间为数据库选定的名称而定。查看参数 statement cache size。
我们将所有数据源的预置语句缓存大小设为 1 条语句,以减少对本地内存的需求,从而避免系统崩溃。
DB2 注册表变量
下面的注册表变量应该在实例级设置(使用 db2set 命令):
表 3. DB2 注册表变量解释
注册表变量 | 描述 |
DB2_RR_TO_RS | 从 DB2 v8.2 开始,不推荐使用该参数。如果在 8.2 以上版本的 DB2 中尝试设置该参数时没有遇到错误,那么可以设置该参数。如果遇到错误,也没有关系。接下来的两个变量就是用来替代
您可能想查找下面的文章: |