WebSphere Process Server V6.2 性能调优,第 3 部分 消息引擎性能调优2

 

 

 

[3/9/09 18:07:54:327 CST] 00000086 SibMessage I [SCA.SYSTEM.widCell.Bus:default.AppTa

rget.000-SCA.SYSTEM.widCell.Bus] CWSIS1538I:

The messaging engine, ME_UUID=2025B17928C161D

6, INC_UUID=303A303AEAB3EDD7, is attempting to obtain an exclusive lock on the data

store.

[3/9/09 18:07:59:343 CST] 00000086 SibMessage I [SCA.SYSTEM.widCell.Bus:default.AppTa

rget.000-SCA.SYSTEM.widCell.Bus] CWSIS1546I:

The messaging engine, ME_UUID=2025B17928C161D

6, INC_UUID=303A303AEAB3EDD7, has lost an existing lock or failed to gain an initial

lock on the data store.

[3/9/09 18:08:04:227 CST] 00000086 SibMessage I [SCA.APPLICATION.widCell.Bus:default.

AppTarget.000-SCA.APPLICATION.widCell.Bus] CWSIS1538I:

The messaging engine, ME_UUID=F1FF9

3EDD8DCD63B, INC_UUID=7CF47CF484B974F5, is attempting to obtain an exclusive lock on

the data store.

[3/9/09 18:08:09:329 CST] 00000086 SibMessage I [SCA.APPLICATION.widCell.Bus:default.

AppTarget.000-SCA.APPLICATION.widCell.Bus] CWSIS1546I:

The messaging engine, ME_UUID=F1FF9

3EDD8DCD63B, INC_UUID=7CF47CF484B974F5, has lost an existing lock or failed to gain an

initial lock on the data store.

[3/9/09 18:08:11:237 CST] 00000086 SibMessage I [CommonEventInfrastructure_Bus:defaul

t.AppTarget.000-CommonEventInfrastructure_Bus] CWSIS1538I:

The messaging engine, ME_UUID=D

65CBBE3A63BDFD6, INC_UUID=6FAA6FAA85818EDB, is attempting to obtain an exclusive lock

on the data store.

[3/9/09 18:08:14:465 CST] 00000086 SibMessage I [CommonEventInfrastructure_Bus:defaul

t.AppTarget.000-CommonEventInfrastructure_Bus] CWSIS1546I:

The messaging engine, ME_UUID=D

65CBBE3A63BDFD6, INC_UUID=6FAA6FAA85818EDB, has lost an existing lock or failed to

gain an initial lock on the data store.

[3/9/09 18:08:18:398 CST] 00000086 SibMessage I [BPC.widCell.Bus:default.AppTarget.00

0-BPC.widCell.Bus] CWSIS1538I:

The messaging engine, ME_UUID=B5290700DB25A3BE, INC_UUID=14

96149685818EF1, is attempting to obtain an exclusive lock on the data store.

[3/9/09 18:08:19:144 CST] 00000086 SibMessage I [BPC.widCell.Bus:default.AppTarget.00

0-BPC.widCell.Bus] CWSIS1546I:

The messaging engine, ME_UUID=B5290700DB25A3BE, INC_UUID=14

96149685818EF1, has lost an existing lock or failed to gain an initial lock on the

data store.

 

 

 

对于消息引擎的调优,必须把握一个原则:其他服务器消息引擎尝试连接数据库的时间大于数据库探测以前的连接丢失的时间

WPS 会在一定时间内等待数据库连接恢复。缺省状况下,其他服务器上消息引擎会在 15 分钟内以 2 秒的频率尝试连接数据库,如果仍无法连接则放弃重连;而数据库所在的操作系统通过 keepalive 等参数来探测数据库与消息引擎的连接是否丢失。对于常用操作系统如 Windows,AIX 等,这个参数的缺省值是 2 个小时。可见,如果使用缺省值,数据库机器会在连接丢失后 2 小时内保持互斥锁,而可用的其它消息引擎只会尝试 15 分钟重连,造成无法实现故障转移的现象。因此,您可以从以下两个方面分别对 WPS 和数据库所在机器进行调优,实现消息引擎的故障转移:

1. 配置数据库所在机器

操作系统控制 TCP/IP 连接的参数如表 2 所示:

表 2. 在 Windows 和 AIX 系统上相关参数及描述

在 Windows 系统上参数名

在 AIX 系统上参数名

参数描述

KeepAliveTime

tcp_keepidle

对于不活动的连接方发送 keepalive 请求的间隔

KeepAliveInterval

tcp_keepintvl

等待请求回复的间隔

TCPMaxDataRetransmissions

tcp_keepcnt

重复发送请求的次数

操作系统获知连接丢失的时间 = keep alive time + (keep alive interval x 请求次数)。我们要保证的是调优后操作系统获知连接丢失的时间小于消息引擎尝试连接时间,此时即可实现正确的故障转移。

由于操作系统不同,修改 keepalive 参数的方法也不同,请您参照使用的操作系统手册进行相应的修改,在此便不一一赘述了。

2. 配置 WPS

1) 在管理控制台里点击服务集成 (Service integration) -> 总线 (Buses) -> 总线名称 -> 消息引擎 -> 引擎名 -> 【其他属性】定制属性

2) 新建定制属性并起名为 sib.msgstore.jdbcInitialDatasourceWaitTimeout ,此属性控制等待重连数据库的时间。并输入属性值,单位为毫秒。缺省值为 900000(15 分钟)。点击”确定” 。保证调优后此数值大于数据库探测连接丢失的时间即可,本例中设为 1800000(30 分钟),如图 5 所示:

图 5. 新建消息引擎定制属性

3) 另新建定制属性 sib.msgstore.jdbcStaleConnectionRetryDelay ,本属性控制每次重连数据库的时间间隔。输入属性值,单位为毫秒,缺省为 2000(2 秒),本例中设为 5000(5 秒),如图 6 所示。点击”确定”。

图 6. 新建消息引擎定制属性

4) 将修改保存到主配置。

5) 在集群环境中,我们需要对其中的每一个消息引擎都重复上述步骤,并重启服务器使修改生效。

回页首

将消息引擎数据存储器迁移到更高性能的数据库

由于消息引擎需要频繁与后台的存储器进行交互,储存或读取消息数据,因此存储器的性能在很大程度上影响了消息引擎的性能。 我们在创建 WPS 或 WESB 概要文件时,缺省使用的是 Derby 数据库。 Derby 数据库可以满足一般测试、开发的需要,但是在高吞吐量的生产环境中不适合使用;同样的,我们也不建议您在生产系统中使用文件系统作为消息引擎的数据存储器。

为了达到更好的性能我们建议您使用符合生产环境需求的数据库,比如 DB2 等企业级数据库。它们提供的性能和技术可以让消息引擎的性能达到最佳,并可以尽可能避免消息数据库给整个应用系统带来的性能瓶颈。您可以在创建概要文件的时候就选择创建高级概要文件的选项来选择使用 DB2 数据库。但是如果您的 WPS 概要文件已经创建,而它使用的数据存储器无法达到系统性能要求时,您可以不用重新创建一个新的概要文件,而是参考如下的示例和步骤,将现有的概要文件所使用的数据存储器迁移至 DB2。由于步骤比较繁琐,下面的内容将十分详细的介绍整个迁移过程,其中包括:数据库的创建,JDBC 驱动的选择和创建,数据源迁移等内容。

在我们开始迁移之前,需要了解源数据存储器状况,并考虑如何规划目标数据库。当您创建完概要文件并配置好业务流程编排器 (Business Process Choreographer) 后,我们应该有四条消息总线,每条消息总线里都有一个消息引擎。表 3 就展示了在单元名称为 widCell 的单元上的四条消息总线:

表 3. 在 widCell 单元上的总线和消息引擎

总线名

消息传递引擎名

SCA.SYSTEM.widCell.Bus

widNode.server1-SCA.SYSTEM.widCell.Bus

SCA.APPLICATION.widCell.Bus

widNode.server1-SCA.APPLICATION.widCell.Bus

CommonEventInfrastructure_Bus

widNode.server1-CommonEventInfrastructure_Bus

BPC.widCell.Bus

widNode.server1-BPC.widCell.Bus

每一个数据存储器都保存在各自的数据库里,也就是说缺省一共有四个数据库需要迁移。这意味着,如果迁移数据库的话, DB2 也要相应的新建四个数据库。对于 DB2 管理员来说这并不是一个很好的选择,因为可能您的数据库系统中已经有很多的数据库存在了,而再增加四个数据库会增添维护和优化的负担。因此我们建议您可以使用单一的一个 DB2 数据库来保存这四个数据存储器,因为这四个存储器彼此是完全隔绝的,并且每一个消息引擎都在启动时会获取自己对应的表的互斥锁,保证消息数据的一致性。此外,每一个消息引擎可以使用唯一的一个模式名来区分自己的表,因此将四个存储器保存在同一个数据库中并不会影响数据的一致性或者造成混乱。

下面就是将已有的消息引擎数据存储器迁移至 DB2 的步骤:

1. 创建 DB2 的数据库并导入数据存储器的模式

与一条消息引擎对应一个 DB2 数据库相反,我们将所有的消息引擎都放在同一个数据库中,只是用不同的模式来区分,如表 4 所示:

表 4. 消息引擎与模式名

模式名

消息传递引擎名

SCASYS

widNode.server1-SCA.SYSTEM.widCell.Bus

SCAAPP

widNode.server1-SCA.APPLICATION.widCell.Bus

CEIMSG

widNode.server1-CommonEventInfrastructure_Bus

BPCMSG

widNode.server1-BPC.widCell.Bus

您可以使用如下脚本在 Windows 系统里为每一个消息引擎创建一个模式定义。在示例中,我们将用 <WPS Install> 代表 WPS 安装路径, <user> 表示用户名。下面的例子展示了如何在 Windows 系统中产生适用于 DB2 8.1 版本,用于创建名为 BPCMSG 的模式定义脚本:

<WPS Install>\bin\sibDDLGenerator.bat -system db2 -version 8.1 -platform windows -statementend ; -schema BPCMSG -user <user> >createSIBSchema_BPCMSG.ddl

对每一条消息引擎都重复运行上述脚本。

注意:如果目标数据库版本高于 Oracle 11g, DB2 9.1 or Informix 11.0, 运行以上的脚本会有问题,这个问题通过 PK76196 进行了修正。

您可以根据您的数据库环境编辑和修改模式定义文件,此后便可以在 DB2 数据库中创建一个数据库,例如 “SIB” ,并创建相应的表空间。然后,载入上述生成的四个模式定义文件来创建 SIB 数据库里的模式和表。

通过这一系列步骤,我们在 DB2 中创建了新的表,表空间,模式以及一个新的数据库作为迁移的目标。

2. 创建消息引擎的数据存储器

接下来我们需要在管理控制台中为每个消息引擎创建一个数据源,并将它们指向新的数据储存器。

数据源依赖于 JDBC 提供程序,因此我们需要确定 WPS 系统中已经配置有 DB2 JDBC 提供程序。而 JDBC 提供程序又分为 XA 和非 XA 两种类型的。它们的区别在于, XA 类型的 JDBC 提供程序使用的是两阶段提交 (two phase commit) 协议,而非 XA 类型的 JDBC 提供程序则是单阶段提交 (one phase commit)。在 WPS 中,对于 CEI 的数据源我们应该使用 XA 类型的 JDBC 提供程序;其余的使用非 XA 类型的即可,如表 5 所示:

表 5. 消息引擎数据源名、 JNDI 名和使用的 JDBC 提供程序类型

数据源名称

JNDI 名

JDBC 提供程序类型

CEIMSG_sib

jdbc/sib/CEIMSG

DB2 Universal (XA)

SCAAPP_sib

jdbc/sib/SCAAPPLICATION

DB2 Universal

SCASYSTEM_sib

jdbc/sib/SCASYSTEM

DB2 Universal

BPCMSG_sib

jdbc/sib/CEIMSG

DB2 Universal

如果在您的环境里没有叫做 “DB2 通用 JDBC 提供程序”的 XA 类型以及非 XA 类型的 JDBC 提供程序,您可以手工创建。下面的例子展示了如何在系统中创建一个 XA 类型的 JDBC 提供程序:

在管理控制台 -> 资源 -> JDBC -> JDBC 提供程序,点击”新建 “,出现如图 7 所示的向导界面:

图 7. 创建新的 XA 类型的 JDBC 提供程序步骤 1

以下文章点击率最高

Loading…


发表评论

电子邮件地址不会被公开。 必填项已用*标注