消息传递引擎故障诊断技巧
使用下面的一组特定技巧来帮助您对服务集成消息传递引擎的问题进行故障诊断。
- 因为运行时尚未初始化而导致消息传递引擎启动失败
使用 DB2 通用 JDBC 2 类驱动程序时,消息传递引擎无法启动
- 消息传递引擎由于 Informix JDBC 驱动程序 3.00JC1 中的已知错误而无法启动
- 数据存储器的问题确定
- 消息传递引擎导致数据库争用消息
连接至联网 Apache Derby V10.3 数据库时用户标识不受支持异常
- XAResourceNotAvailableException 异常的可能原因以及如何执行适当的操作
- 重新创建服务集成总线时发生的问题
- 外部总线通信问题
- 在尝试与已重命名的外部总线通信时产生的问题
- 包含 SILimitExceeded 异常的 JMSException 的可能原因
- 系统重新启动时的损坏问题
- 在管理控制台中检索消息传递引擎的状态
- 使应用程序可以在必需的消息传递引擎启动前启动
服务器启动期间出现的通道框架消息
对于包含 V6 服务器的混合版本集群,不支持消息传递引擎故障转移
因为运行时尚未初始化而导致消息传递引擎启动失败
消息传递引擎启动失败,WebSphere® Application Server 管理控制台中显示以下错误:
The messaging engine <name> cannot be started as there is no runtime
initialized for it yet, retry the operation once it has been initialized.
If dynamic configuration reload is enabled for this bus, then the servers
must be restarted.
再次尝试启动消息传递引擎之前,请确保您已重新启动服务器。要让运行时成功初始化,必须启动应用程序服务器。
![[z/OS]](../images/ngzos.gif)
使用 DB2 通用 JDBC 2 类驱动程序时,消息传递引擎无法启动
尝试使用 DB2® 通用 JDBC 2 类驱动程序在 z/OS 平台上存储数据时,消息传递引擎未启动并且 WebSphere Application Server SystemOut.log 文件中可能会出现类似于以下消息的“存储器分配错误”消息:
BBOO0220E: [SB6NLA1:SB6NLA1.server1-SB6NLA1] CWSIP0002E: An
internal messaging error occurred in com.ibm.ws.sib.processor.im
pl.MessageProcessor, 1:1469:1.365, com.ibm.ws.sib.msgstore.Messa
geStoreRuntimeException: com.ibm.ws.sib.msgstore.PersistenceExce
ption: CWSIS1501E: The data source has produced an unexpected
exception: com.ibm.db2.jcc.t2zos.y: [IBM/DB2][T2zos/2.5.48]T2zo
sPreparedStatement.readPrepareDescribeOutput_:processDescribeOut
put:1563:Storage Allocation Error at com.ibm.ws.sib.msgstore.cac
he.links.AbstractItemLink.readDataFromPersistence(AbstractItemLi
nk.java:2487) at
com.ibm.ws.sib.msgstore.cache.links.AbstractItemLink._restoreIte
m(AbstractItemLink.java:639)
- 使用管理控制台浏览至
- 将 JDBC 驱动程序定制属性 fullyMaterializeLobData 设置为false。
fullyMaterializeLobData 定制属性用于确定某行已访存时是在 JDBC 驱动程序中完全具体化 LOB 数据,还是根据需要分块对 LOB 数据进行检索。实际行为取决于数据库服务器是否支持顺序流式方法。请参阅 DB2 文档以了解有关此属性的更多信息。缺省值是 true。
- 将更改保存至主配置。
- 重新启动应用程序服务器。
消息传递引擎由于 Informix JDBC 驱动程序 3.00JC1 中的已知错误而无法启动
当尝试使用 Informix® JDBC 驱动程序 3.00JC1 来存储数据时,消息传递引擎无法启动,在 WebSphere Application Server 的 SystemOut.log 文件中可能会出现以下错误消息:
00000022 SibMessage E [RetireBus:retire_web.000- RetireBus] CWSIS0002E:
消息传递引擎在启动时遇到异常。
异常:com.ibm.ws.sib.msgstore.PersistenceException: CWSIS1501E:
数据源生成了意外的异常:java.sql.BatchUpdateException: 违反了唯一约束(informix.u114_62)。
00000022 SibMessage E [RetireBus:retire_web.000- RetireBus] CWSID0035E:
消息传递引擎 retire_web.000-RetireBus 无法启动;
在 com.ibm.ws.sib.msgstore.impl.MessageStoreImpl start() 期间报告了检测到的错误
00000022 SibMessage E [RetireBus:retire_web.000- RetireBus] CWSID0027I:
消息传递引擎 retire_web.000-RetireBus 由于报告了严重错误而无法重新启动。T] 00000022 SibMessage I [RetireBus:retire_web.000- RetireBus] CWSID0016I:
消息传递引擎 retire_web.000-RetireBus 处于“已停止”状态。
在 Informix JDBC 驱动程序 3.00JC1 中有一个已知的缺陷 (PTS 172471)。要避免此错误,请将 Informix JDBC 驱动程序升级到 3.00JC2。
数据存储器的问题确定
您可对消息传递引擎的数据存储器中的数据创建转储(以简化形式)。该输出供 IBM 服务人员使用。请与支持组织联系以获取有关如何运行该命令的信息。- 使用 Jython:
AdminControl.invoke(AdminControl.queryNames("type=SIBMessagingEngine, name=messagingenginename,*"), "dump", "com.ibm.ws.sib.msgstore.*")
- 使用 Jacl:
$AdminControl invoke [$AdminControl queryNames type=SIBMessagingEngine, name=messagingenginename,*] dump com.ibm.ws.sib.msgstore.*
在 $WAS_HOME/logs/server1 目录中作为 XML 文件来创建转储。按照下列格式指定该文件:messaging_engine_nameUUIDtimestamp.xml
<MessageStore>
<itemStreams>
<ItemStreamLink id="0" state="Available">
<class>com.ibm.ws.sib.msgstore.ItemStream</class>
<priority>5</priority>
<canExpireSilently></canExpireSilently>
<storageStrategy>STORE_NEVER</storageStrategy>
<expiryTime>0</expiryTime>
<sequence>0</sequence>
<tranID>null</tranID>
<tickValue>0</tickValue>
<items>
<ItemLink id="2" state="Available" refCount="3" refCountDecreasing="false">
<class>com.ibm.ws.sib.msgstore.Item</class>
<priority>5</priority>
<canExpireSilently></canExpireSilently>
<storageStrategy>STORE_NEVER</storageStrategy>
<expiryTime>0</expiryTime>
<sequence>1</sequence>
<tranID>null</tranID>
<tickValue>0</tickValue>
</ItemLink></items></ItemStreamLink></itemStreams></MessageStore>
消息传递引擎导致数据库争用消息
CWSIS1546I:
消息传递引擎 ME_UUID={0}, INC_UUID={1},
丢失现有锁定或无法获取对数据存储器的初始锁定。
- 检查数据库问题,例如,数据库不可用。
- 检查网络问题。例如,如果网络超负荷,那么两个应用程序服务器可能能够连接至数据库,但可能无法相互连接,这可能导致资源协调问题。
- 如果具有提供高可用性或工作负载分摊的服务集成配置,请检查是否正确配置了适当的资源。例如,检查消息传递引擎、这些消息传递引擎的核心组策略以及将每个核心组策略与消息传递引擎相关联的匹配条件。请参阅配置服务集成的高可用性和工作负载分摊。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
连接至联网 Apache Derby V10.3 数据库时用户标识不受支持异常
java.lang.Exception: java.sql.SQLException: 不支持 null 用户标识 DSRA0010E:
SQL 状态 = null,错误
![[IBM i]](../images/iseries.gif)
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
XAResourceNotAvailableException 异常的可能原因以及如何执行适当的操作
将 deleteNode 命令用于主管消息传递引擎的节点时,会删除那些消息传递引擎。使用 addNode 命令重新创建新的消息传递引擎时,它们拥有不同的标识,因此,在事务恢复期间,不可能连接至旧的消息传递引擎。对主管消息传递引擎的每个服务器都会在 SystemOut.log 文件中生成一个标识 XAResourceNotAvailableException 异常的消息。要解决该问题,您必须按照解决不确定事务中描述的过程进行操作。
集群总线成员中的服务器进行故障转移时也会抛出 XAResourceNotAvailableException 异常。在该情况下,不需要操作员干预就可恢复并解析事务。
重新创建服务集成总线时发生的问题
如果您删除服务集成总线并在稍后创建同名的新总线,那么消息传递引擎不会启动并且会在 SystemOut.log 中生成如下消息:[8/11/04 21:55:01:439 CDT] 0000000f SibMessage I
[LateBus:xyzsun15.server1-LateBus] isAlive: MessagingEngine 遇到常见错误。更正错误(请参阅日志)并重新启动服务器。
[8/11/04 21:55:01:468 CDT] 0000000f SibMessage I
[LateBus:xyzsun15.server1-LateBus] isAlive: MessagingEngine 由于常见错误将停止。将不发生故障转移。
[8/11/04 21:55:01:493 CDT] 0000000f SibMessage I
[LateBus:xyzsun15.server1-LateBus] 消息传递引擎
xyzsun15.server1-LateBus 未处于有效的停止状态:正在启动
[8/11/04 21:55:01:513 CDT] 0000000f SibMessage I
[LateBus:xyzsun15.server1-LateBus] isAlive: MessagingEngine 由于常见错误而停止。更正错误(请参阅日志)并重新启动服务器。
[8/11/04 21:57:01:431 CDT] 0000000e SibMessage I
[LateBus:xyzsun15.server1-LateBus] isAlive: MessagingEngine 遇到常见错误。更正错误(请参阅日志)并重新启动服务器。
删除总线后,由于消息传递引擎的数据库目录仍存在,因此消息传递引擎无法启动。您必须手动移除该目录。要删除不存在的消息传递引擎的 Apache Derby 数据库,必须删除 profile_root/databases/com.ibm.ws.sib 中的数据库目录,其中 profile_root 是特定于概要文件的信息的存储目录。
您必须先停止 WebSphere Application Server,然后再删除数据库文件。
对于其他数据库,可以删除数据存储器表中的所有行,也可以删除所有数据存储器表。这些表在您为数据存储器配置的模式中。有关表的列表,请参阅数据存储器表。
有关更多信息,请参阅数据存储器生命周期。
外部总线通信问题
为了在总线之间进行通信,必须创建外部总线和服务总线集成链路。在第一条总线上,外部总线名必须与成为外部总线的第二条总线的名称匹配,第二条总线的外部总线名必须与第一条总线的名称匹配。这两条总线上的服务集成总线链路名必须相同。
如果配置不正确(例如服务集成总线链路不匹配),那么您可能会遇到以下类型的错误:
SibMessage E [TechBus:TechCluster.000-TechBus] CWSIT0057E: 在主机
aixp401.rchland.ibm.com 上的远程消息传递引擎中,总线之间的连接 BookstoreBus 失败,
原因为:CWSIT0067E: 总线 BookstoreBus 中总线之间的连接 BookstoreBus
不可用。
在尝试与已重命名的外部总线通信时产生的问题
用于配置服务集成总线链路的属性的管理控制台面板也可用于更改链路指向的外部总线名称。但是,配置外部总线后,您不能变更它的名称。如果更改该名称,那么直到外部总线名称重设为其先前的值时,已保存有关该链路的状态信息的所有消息传递引擎才能使用该链路。
包含 SILimitExceeded 异常的 JMSException 的可能原因
当一个目标中存放的消息数达到它的限制阈值时,尝试将消息发送至该目标时都将失败,并产生包含 SILimitExceeded 异常的 JMSException。在目标所存放的消息数下降到低于限制阈值之前,该目标将继续失败并产生此异常。
要获得可用消息数的准确计数,可以监视队列和主题空间目标的“可用消息计数 PMI”统计信息。如果可用消息数增加,那么应执行操作来平衡系统。应考虑让生产者停止发送新消息,直到目标使用可用消息为止。
- 相对于预计的消息数,目标的阈值上限太低了。目标不会处理某些消息。阈值上限的缺省值为 50000。解决方案: 增大目标的阈值上限。
- 应用程序生成的消息数超过了目标可以处理的消息数。
理想的平衡状态是在一段时间内产生的消息数与使用的消息数相等。如果系统处于不平衡状态,而是生产应用程序发送的消息数多于目标可以使用的消息数,那么生产应用程序最终会抛出 JMSException。
解决方案: 目标是使产生的消息数与使用的消息数达到平衡。提示: 对象请求代理 (ORB) 线程池的缺省设置是 100 个线程。对于某些应用程序,可能会允许 100 个应用程序将消息发送至同一个目标。考虑将 ORB 线程池调整为最多具有 10 个线程。将此值设置得较低就会减少可以发送消息的生产者的数目,这就可能会增大总体消息吞吐量。 - 应用程序正在处理来自目标的消息,但是速度很慢。解决方案: 可能需要增大客户机应用程序使用的消息数。当从该目标中读取多个使用者时,目标将处理更多消息。
考虑在非集群环境中的多个服务器之间克隆应用程序。缺省情况下,是在集群服务器环境中克隆应用程序的。要在非集群环境中启用订户,在 DurableSubscriptions 的 TopicConnectionFactory JNDI 设置中设置 cloned 标志。
限制: 此解决方案不适用于要求对所有消息进行排序的应用程序。 - 消息的服务质量属性优于最大努力非持久。解决方案: 使用服务质量属性为最大努力非持久的消息。如果系统中有过多消息,那么目标将废弃最大努力非持久消息。限制: 此解决方案不适用于必须接收所有消息的应用程序。
系统重新启动时的损坏问题
重新启动系统之后,消息传递引擎、目标或链路可能会损坏,尽管很少发生这种情况。如果发生这种损坏,那么您将看到一条消息指出发生的问题。如果问题与消息传递引擎有关,那么消息传递引擎将无法启动。如果目标或链路被毁坏,那么相关消息传递引擎将启动,但是该目标或链路在该消息传递引擎上将不可用。
如果您不知道导致该问题的原因,请与 IBM 服务代表联系,以便在尝试解决此情况之前确定原因。
- 通过浏览至,再单击完全再同步,可以使用管理控制台确保配置文件在系统中同步。运行此操作可能要花几分钟。
- 如果问题仍然存在,请执行下列其中一项任务:
- 删除损坏的对象然后再重新进行创建。在发生损坏前生成或接收到的消息将丢失。
- 从备份来恢复系统,请参阅复原数据存储器,然后恢复其消息传递引擎。自从执行备份以来生成或接收到的消息将丢失。
在管理控制台中检索消息传递引擎的状态
要能够检索消息传递引擎的状态,您必须至少使用监视权限登录管理控制台。如果您没有此权限,那么消息传递引擎状态将显示为“不可用”,即使该消息传递引擎已启动也是如此。
[4/20/05 10:49:57:083 CDT] 0000004b RoleBasedAuth A SECJ0305I: 对于 admin-authz 操作 SIBMessagingEngine:stateExtended,基于角色的授权检查失败。用户 UNAUTHENTICATED(唯一标识:unauthenticated)未被授予下列任何必需的角色:管理员、操作员、配置人员和监视员。
显示在消息中的用户标识就是您用来登录至管理控制台的用户标识。使应用程序可以在必需的消息传递引擎启动前启动
如果应用程序依赖于可用的消息传递引擎,那么必须先启动消息传递引擎,然后再运行该应用程序。如果要让应用程序服务器自动启动应用程序,那么应该将应用程序开发成测试任何必需的消息传递引擎是否已启动,并根据需要等待消息传递引擎启动。如果在启动 Bean 中使用此技术,那么启动 Bean 方法应该在独立的线程中使用标准 WorkManager 方法来执行测试和等待工作,以便应用程序服务器的启动不会被延迟。
要获取用于测试和等待消息传递引擎的代码示例,请参阅依赖于消息传递引擎可用性的应用程序。
![[z/OS]](../images/ngzos.gif)
服务器启动期间出现的通道框架消息
- 发出以下消息的原因是,启动消息传递引擎前包含消息驱动的 Bean 的应用程序已启动。
CWSIV0759W: 在激活消息驱动的 Bean 期间,在总线 {0} 上的本地服务器中找不到合适的活动消息传递引擎。
当消息传递引擎启动时,另一条参考消息将确认这种情况,接着就可以进行消息处理。
- 发出以下消息的原因是,z/OS TCP 代理通道以异步方式启动。
CHFW0030E: 由于发生异常 {1},因此启动链 {0} 时出错
当消息传递引擎启动时,另一条参考消息将确认这种情况,接着就可以进行消息处理。
这些消息仅在特定情况下显示,例如,如果您在迁移期间更改了端口,那么可能会显示这些消息。
- 在服务器启动期间,控制区域助手进程中可能会多次显示以下消息,即使随后进行重试时连接成功也是如此。发出此消息的原因是,z/OS TCP 代理通道以异步方式启动,但该消息并不表示发生了任何错误。
跟踪时间:2009/06/17 08:24:41.434 01 t=9C6B58 c=UNK key=P8 (00000011) 描述:记录 Java 消息 消息:CHFW0030E: 启动链 _InboundTCPProxyBridgeService 时出错, 因为发生了异常 com.ibm.wsspi.channel.framework.exception.RetryableChannelException: 尝试启动 TCPProxyChannel 时抛出了异常 com.ibm.ws.channel.framework.imp l.ChannelFrameworkImpl
发出这些消息的同时,可能会显示首次故障数据捕获 (FFDC) 输入,其内容类似于以下示例:
最终,应显示以下消息,指示 z/OS TCP 代理通道已正常启动:异常 = com.ibm.wsspi.channel.framework.exception.RetryableChannelException 源 = com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.startChainInternal probeid = 2577 堆栈转储 = com.ibm.wsspi.channel.framework.exception.RetryableChannelException: 尝试启动 TCPProxyChannel 时抛出了异常 at com.ibm.ws.tcpchannelproxy.jfap.impl.TCPProxyInboundChannel.start(TCPProxyInboundChannel.java:153) at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.startChannelInChain(ChannelFrameworkImpl.java:1410) at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.startChainInternal(ChannelFrameworkImpl.java:2863) at com.ibm.ws.channel.framework.impl.WSChannelFrameworkImpl.startChainInternal(WSChannelFrameworkImpl.java:960) at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.startChainInternal(ChannelFrameworkImpl.java:2794) at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.startChain(ChannelFrameworkImpl.java:2779) at com.ibm.ws.runtime.component.ChannelFrameworkServiceImpl.startChain(ChannelFrameworkServiceImpl.java:666) at com.ibm.ws.sib.jfapchannel.framework.impl.ChannelFrameworkReference$TCPProxyBridgeServiceInboundChainStartupRunnable .run(ChannelFrameworkReference.java:1641) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550) 原因:com.ibm.ws.tcpchannelproxy.jfap.NotYetInitializedException:服务器尚未初始化 at com.ibm.ws.tcpchannelproxy.jfap.TCPProxyBridgeServicesImpl.startListening(TCPProxyBridgeServicesImpl.java:558) at com.ibm.ws.tcpchannelproxy.jfap.impl.TCPProxyInboundChannel.start(TCPProxyInboundChannel.java:131) ... 8 more
跟踪时间:2009/06/17 08:24:51.449 01 t=9C6B58 c=UNK key=P8 (13007002) ThreadId: 00000003 FunctionName: com.ibm.ws.channel.framework.impl.WSChannelFrameworkImpl SourceId: com.ibm.ws.channel.framework.impl.WSChannelFrameworkImpl Category: AUDIT ExtendedMessage: BBOO0222I: CHFW0019I: 传输通道服务已启动 链 _InboundTCPProxyBridgeService。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
![[z/OS]](../images/ngzos.gif)
对于包含 V6 服务器的混合版本集群,不支持消息传递引擎故障转移
WebSphere Application Server V7.0 或更高版本 服务器上的消息传递引擎无法故障转移至 WebSphere Application Server V6 服务器上的消息传递引擎。如果您的集群总线成员同时包含 V6 和更高版本服务器,那么必须确保高可用性策略配置为禁止此类型的故障转移。
为阻止将 V7.0 或更高版本 消息传递引擎故障转移至 V6 服务器,请为该消息传递引擎配置高可用性策略,以将集群有效地分为一组用于 V6 的服务器和另一组用于 V7.0 或更高版本 的服务器,并将 V7.0 或更高版本 消息传递引擎限制为仅用于 V7.0 或更高版本 上的服务器。请参阅配置混合版本集群的消息传递引擎故障转移。