消息传递引擎故障诊断技巧
使用下面的一组特定技巧来帮助您对服务集成消息传递引擎的问题进行故障诊断。
- 因为运行时尚未初始化而导致消息传递引擎启动失败
消息传递引擎未使用 DB2 Universal JDBC 类型 2 驱动程序启动
- 由于 Informix JDBC Driver 3.00JC1中的已知错误,消息传递引擎无法启动
- 数据存储器的问题确定
- 消息传递引擎导致数据库争用消息
- XAResourceNotAvailableException 异常的可能原因以及如何执行适当的操作
- 重新创建服务集成总线时发生的问题
- 外部总线通信问题
- 在尝试与已重命名的外部总线通信时产生的问题
- 包含 SILimitExceeded 异常的 JMSException 的可能原因
- 系统重新启动时的损坏问题
- 在管理控制台中检索消息传递引擎的状态
- 使应用程序可以在必需的消息传递引擎启动前启动
在服务器启动期间出现通道框架消息
- 包含 V 6 服务器的混合版本集群不支持消息传递引擎故障转移
因为运行时尚未初始化而导致消息传递引擎启动失败
消息传递引擎无法启动,并且在 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.
再次尝试启动消息传递引擎之前,请确保您已重新启动服务器。 要让运行时成功初始化,必须启动应用程序服务器。
消息传递引擎未使用 DB2 Universal JDBC 类型 2 驱动程序启动
尝试使用 DB2® Universal JDBC 类型 2 驱动程序在 z/OS 平台上存储数据时,消息传递引擎不会启动,Storage Allocation Error类似于以下消息的消息可能会出现在 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 分配错误 com.ibm.ws.sib.msgstore.cac he.links.AbstractItemLink.readDataFromPersistence(AbstractItemLi nk.java:2487 在 com.ibm.ws.sib.msgstore.cache.links.AbstractItemLink._restoreIte m( AbstractItemLink.java:639 )
- 使用管理控制台浏览至
- 将 JDBC 驱动程序定制属性
fullyMaterializeLobData设置为 false。fullyMaterializeLobData定制属性用于确定某行已访存时是在 JDBC 驱动程序中完全具体化 LOB 数据,还是根据需要分块对 LOB 数据进行检索。 实际行为取决于数据库服务器是否支持顺序流式方法。 请参阅 DB2 文档以了解有关此属性的更多信息。 缺省值为 true。 - 将更改保存至主配置。
- 重新启动应用程序服务器。
由于 Informix JDBC Driver 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 ,因为 严重错误为 reported.T] 00000022 SibMessage I [RetireBus:retire_web.000- RetireBus] CWSID0016I: 消息传递引擎 retire_web.000-RetireBus 处于“已停止”状态。
Informix JDBC Driver 3.00JC1中存在已知缺陷 (PTS 172471)。 要避免此错误,请将 Informix JDBC Driver 升级到 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} 丢失了
现有锁定或无法获得数据存储器上的初始锁定。
- 检查数据库问题,例如,数据库不可用。
- 检查网络问题。 例如,如果网络超负荷,那么两个应用程序服务器可能能够连接至数据库,但可能无法相互连接,这可能导致资源协调问题。
- 如果具有提供高可用性或工作负载分摊的服务集成配置,请检查是否正确配置了适当的资源。 例如,检查消息传递引擎、这些消息传递引擎的核心组策略以及将每个核心组策略与消息传递引擎相关联的匹配条件。
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 suffered 公共方式错误。 更正错误(请参阅日志)并重新启动服务器。
删除总线后,由于消息传递引擎的数据库目录仍存在,因此消息传递引擎无法启动。您必须手动移除该目录。 要删除不存在的消息传递引擎的 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) 授予任何 以下必需角色 :administrator , operator , configurator 和 monitor。显示在消息中的用户标识就是您用来登录至管理控制台的用户标识。
使应用程序可以在必需的消息传递引擎启动前启动
如果应用程序依赖于可用的消息传递引擎,那么必须先启动消息传递引擎,然后再运行该应用程序。 如果要让应用程序服务器自动启动应用程序,那么应该将应用程序开发成测试任何必需的消息传递引擎是否已启动,并根据需要等待消息传递引擎启动。 如果在启动 Bean 中使用此技术,那么启动 Bean 方法应该在独立的线程中使用标准 WorkManager 方法来执行测试和等待工作,以便应用程序服务器的启动不会被延迟。
有关用于测试和等待消息传递引擎的代码示例,请参阅 依赖于消息传递引擎可用性的应用程序。
服务器启动期间出现的通道框架消息
- 发出以下消息的原因是,启动消息传递引擎前包含消息驱动的 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) 输入,其内容类似于以下示例:异常 = 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 个
最终应显示以下消息,指示 z/OS TCP 代理通道已正确启动:跟踪时间: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。
包含 V 6 服务器的混合版本集群不支持消息传递引擎故障转移
在 WebSphere Application Server Version 7.0 或更高版本 服务器上托管的消息传递引擎无法故障转移到在 WebSphere Application Server Version 6 服务器上托管的消息传递引擎。 如果您具有由 V 6 和更高版本的服务器混合组成的集群总线成员,那么必须确保配置高可用性策略以防止此类型的故障转移。
为防止 V 7.0 或更高版本 消息传递引擎故障转移到 V 6 服务器,请 配置消息传递引擎的高可用性策略 ,以便将集群有效地分为一组用于 V 6 的服务器,另一组用于 V 7.0 或更高版本的服务器, 并且 V 7.0 或更高版本 消息传递引擎仅限于 V 7.0 或更高版本的服务器。