Sun Java System Message Queue 3.7 UR1 管理指南

消息堆积

症状:

要查看消息是否在堆积,请检查代理中的消息数或消息字节数如何随时间的推移而改变,并与配置的限制进行比较。首先检查配置的限制:

imqcmd query bkr


注 –

imqcmd metrics bkr 子命令不会显示此信息。


然后检查每个目的地中的消息堆积情况。

imqcmd list dst

要检查消息是否已超出配置的目的地或代理范围的限制,请在代理日志中检查如下条目:

[B2011]:存储来自 的 JMS 消息失败。

此条目后面接有另一个标识已超出限制的条目。

可能的原因:

可能的原因:主题目的地上有非活动的长期订阅。

如果长期订阅是非活动的,则消息会存储在目的地中,直到相应的使用方变为活动状态且能够使用这些消息为止。

确认问题的起因:检查每个主题目的地上的长期订阅的状态:

imqcmd list dur -d destName

解决此问题:

可能的原因:队列中可以使用消息的使用方太少。

如果消息可以传送到的活动使用方太少,队列目的地可能会随着消息的堆积而堆满了后备队列。只要有下列任何原因,都会发生此情况:

确认问题的起因:要确定使用方不可用的原因,请检查目的地上活动使用方的数目:

imqcmd metrics dst - n destName -t q -m con

解决此问题:根据使用方不可用的原因,

可能的原因:消息使用方的处理速度太慢,跟不上消息生成方的速度。

在这种情况下,主题的订阅者或队列的接收者使用消息的速度要比生成方发送消息的速度慢。有一个或多个目的地因为这种不平衡而堆满了消息。

确认问题的起因:检查消息流入和流出代理的速率:

imqcmd metrics bkr -m rts

然后检查每个单独目的地的流速:

imqcmd metrics bkr -t destType -n destName - m rts

解决此问题:

可能的原因:客户端确认处理减慢了消息的使用。

有两个因素影响客户端确认处理:

确认问题的起因:

解决此问题:

可能的原因:代理无法适应生成消息的速度。

在这种情况下,消息流入代理的速度比代理可以将它们路由并发送到使用方的速度要快。代理的迟缓可能由下列任一或全部限制所导致:

确认问题的起因:检查有无其他可能的原因导致此问题。

解决此问题:

可能的原因:客户端代码缺陷:使用方不确认消息。

消息会保留在目的地中,直到消息所发送到的所有使用方都进行了确认为止。如果客户端没有确认已使用消息,则该消息会在目的地中堆积,而不会被删除。

例如,客户端代码可能存在以下缺陷:

确认问题的起因:首先检查本节中列出的其他所有可能的原因。其次,使用以下命令列出目的地:

imqcmd list dst

请注意 UnAcked 标题下列出的消息数目是否与目的地中的消息数目相同。此标题下的消息已发送到使用方但未得到确认。如果此数目与消息总数相同,则说明代理已发送所有消息,正在等待确认。

解决此问题:请求应用程序开发者帮助调试此问题。