消息传递引擎故障诊断技巧

使用下面的一组特定技巧来帮助您对服务集成消息传递引擎的问题进行故障诊断。

因为运行时尚未初始化而导致消息传递引擎启动失败

消息传递引擎启动失败,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.

再次尝试启动消息传递引擎之前,请确保您已重新启动服务器。要让运行时成功初始化,必须启动应用程序服务器。

要了解是否因为启动问题而导致消息传递引擎运行时无法初始化,请检查主管服务器的 SystemOut.log 中的错误消息。
注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.logSystemErr.logtrace.logactivity.log 文件。您还可以将 HPEL 与本机 z/OS® 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件 bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用 HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。
[z/OS]

使用 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)
对于 z/OS 平台,应使用 DB2 通用 JDBC 4 类驱动程序。如果必须使用 DB2 通用 JDBC 2 类驱动程序,请完成下列步骤:
  1. 使用管理控制台浏览至资源 -> JDBC -> 数据源 -> data_source_name -> [其他属性] 定制属性
  2. 将 JDBC 驱动程序定制属性 fullyMaterializeLobData 设置为false

    fullyMaterializeLobData 定制属性用于确定某行已访存时是在 JDBC 驱动程序中完全具体化 LOB 数据,还是根据需要分块对 LOB 数据进行检索。实际行为取决于数据库服务器是否支持顺序流式方法。请参阅 DB2 文档以了解有关此属性的更多信息。缺省值是 true。

  3. 将更改保存至主配置。
  4. 重新启动应用程序服务器。

消息传递引擎由于 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 服务人员使用。请与支持组织联系以获取有关如何运行该命令的信息。
如果数据存储器中的数据存在问题,那么很难从跟踪输出进行诊断。但是,您可创建数据存储器中的数据转储(以 XML 格式)。这就使诊断更容易,因为它是可读表示法,它可根据需要变换为其他格式。可以通过在 wsadmin 工具中输入以下命令来创建数据存储器转储:
  • 使用 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][IBM i]

连接至联网 Apache Derby V10.3 数据库时用户标识不受支持异常

测试与联网 Apache Derby V10.3 数据库的连接时,产生以下异常:
java.lang.Exception: java.sql.SQLException: 不支持 null 用户标识 DSRA0010E:
SQL 状态 = null,错误
[IBM i][AIX Solaris HP-UX Linux Windows]创建新的联网 Apache Derby 数据存储器时,缺省情况下会获取空白认证别名。[IBM i][AIX Solaris HP-UX Linux Windows]如果将联网方式的 Apache Derby 与 DB2 通用 JDBC 驱动程序(即,使用“使用 (DB2) 通用 JDBC 驱动程序的 Derby Network Server 的 JDBC 提供程序”)配合使用,那么必须指定认证别名。在Apache Derby 的数据源最小要求设置中说明了此要求。
注: [AIX Solaris HP-UX Linux Windows][IBM i]只有“使用 (DB2) 通用 JDBC 驱动程序的 Derby Network Server 的 JDBC 提供程序”才需要使用认证别名。建议不要使用此驱动程序,并且将被不需要认证别名的“使用 Derby 客户机的 Derby Network Server 的 JDBC 提供程序”替换。
另请参阅为消息传递引擎配置 JDBC 数据源

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 服务代表联系,以便在尝试解决此情况之前确定原因。

如果您知道问题的原因,例如,您知道数据库存在问题,那么通过完成以下步骤来解决该问题:
  1. 通过浏览至系统管理 -> 节点,再单击完全再同步,可以使用管理控制台确保配置文件在系统中同步。运行此操作可能要花几分钟。
  2. 如果问题仍然存在,请执行下列其中一项任务:

在管理控制台中检索消息传递引擎的状态

要能够检索消息传递引擎的状态,您必须至少使用监视权限登录管理控制台。如果您没有此权限,那么消息传递引擎状态将显示为“不可用”,即使该消息传递引擎已启动也是如此。

如果您没有使用检索消息传递引擎的状态所需要的权限来登录,那么会将类似以下内容的错误消息记录到服务器的 systemOut 日志文件中:
[4/20/05 10:49:57:083 CDT] 0000004b RoleBasedAuth A   SECJ0305I: 对于 admin-authz 操作 SIBMessagingEngine:stateExtended,基于角色的授权检查失败。用户 UNAUTHENTICATED(唯一标识:unauthenticated)未被授予下列任何必需的角色:管理员、操作员、配置人员和监视员。
显示在消息中的用户标识就是您用来登录至管理控制台的用户标识。

使应用程序可以在必需的消息传递引擎启动前启动

如果应用程序依赖于可用的消息传递引擎,那么必须先启动消息传递引擎,然后再运行该应用程序。如果要让应用程序服务器自动启动应用程序,那么应该将应用程序开发成测试任何必需的消息传递引擎是否已启动,并根据需要等待消息传递引擎启动。如果在启动 Bean 中使用此技术,那么启动 Bean 方法应该在独立的线程中使用标准 WorkManager 方法来执行测试和等待工作,以便应用程序服务器的启动不会被延迟。

要获取用于测试和等待消息传递引擎的代码示例,请参阅依赖于消息传递引擎可用性的应用程序

[z/OS]

服务器启动期间出现的通道框架消息

启动服务器时,您可能会看到控制区域助手 (CRA) 进程中显示的通道框架参考消息。这些消息并不表示发生了任何错误,并且不需要您执行任何操作。
  • 发出以下消息的原因是,启动消息传递引擎前包含消息驱动的 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 more
    最终,应显示以下消息,指示 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。
[AIX Solaris HP-UX Linux Windows][IBM i][z/OS]

对于包含 V6 服务器的混合版本集群,不支持消息传递引擎故障转移

WebSphere Application Server V7.0 或更高版本 服务器上的消息传递引擎无法故障转移至 WebSphere Application Server V6 服务器上的消息传递引擎。如果您的集群总线成员同时包含 V6 和更高版本服务器,那么必须确保高可用性策略配置为禁止此类型的故障转移。

为阻止将 V7.0 或更高版本 消息传递引擎故障转移至 V6 服务器,请为该消息传递引擎配置高可用性策略,以将集群有效地分为一组用于 V6 的服务器和另一组用于 V7.0 或更高版本 的服务器,并将 V7.0 或更高版本 消息传递引擎限制为仅用于 V7.0 或更高版本 上的服务器。请参阅配置混合版本集群的消息传递引擎故障转移


指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rjk_prob0
文件名:rjk_prob0.html