日志相关

本文将介绍常见的日志相关问题及相应的解决方案。

如何根据客户端日志判断当前状态?

消息队列客户端日志文件是 sofamq.log,包括 INFO、WARN、ERROR 级别的日志。

此处提供常见的客户端日志打印信息,旨在帮助您更好地从打印的日志中获取信息,并判断当前状态,从而排查故障。

下表列举了 sofamq.log 日志信息说明(持续更新)。

日志级别

打印信息

说明

解决方案

INFO

[persistAll] Group: CID_XXXX ClientId: 10.31.40.100@171374#14159XXX#-2036649XXX#20931314294957XXX updateConsumeOffsetToBroker MessageQueue [topic=XXXX, brokerName=qdinternetorder-XX, queueId=X] 1013XXX

这种现象说明消息已经消费成功,并且在消息队列服务端已持久化消费进度;MessageQueue 里包括了消息主题、对应的 brokerName、消费队列的 ID。

不涉及

[PULL_TPS] [CID_XXXX@CID_XXXX] Stats In One Minute, SUM: 0 TPS: 0.00 AVGPT: 0.00</br>[PULL_RT] [%RETRY%CID_XXXX@CID_XXXX] Stats In One Minute, SUM: 0 TPS: 0.00 AVGPT: 0.00

该类信息打印的是从 consumeQueue 中拉取消息时的 TPS(每秒 Request 的数量)。

不涉及

WARN

[TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: 905ms, size of queue: 1164

消息队列服务端压力过大,处理不了过多的请求;由于服务端在存储数据时是先写入 pageCache,然后去刷盘,因此每隔 10s 会去清理过期的请求(此过程会判断缓存页是否繁忙)。

  1. 扩容,增加 Broker 分担压力。

  2. osPageCacheBusyTimeOutMills 属性值调大。

execute the pull request exceptioncom.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 25 DESC: the consumer's subscription not latest

Broker 每隔一段时间就会向 NameServer 上报自身路由信息,如果此过程网络抖动,拉不到最新的订阅信息,导致消费者消费的时候,会出现该警告。

不涉及

[WRONG]mq is consuming, so can not unlock it, MessageQueue [topic=XX, brokerName=szorder2-02, queueId=1]. maybe hanged for a while, 2

进行负载均衡时,对消息处理队列尝试加锁,如果 1s 内还未加锁成功,说明当前消息处理队列已经有消费者在访问,不能进行解锁。

不涉及

doRebalance, XXX-CID, add a new mq failed, MessageQueue [topic=XXXX, brokerName=szorder2-XX, queueId=X], because lock failed

当前使用的是顺序 Topic,为了保证单个分区中消息的顺序消费,会有个 Lock 的机制。客户端有这个日志说明其中某个分区已经有客户端在消费了。

不涉及

get Topic [XXXXXX] RouteInfoFromNameServer is not exist valuecom.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQClientException: CODE: 17 DESC: No topic route info in name server for the topic: TOPIC_XXXXX</br>See http://rocketmq.apache.org/docs/faq/ for further details.

  • AccessKey(包含 AccessKeyId 和 AccessKeySecret)配置错误。

  • 没有控制台于当前实例下创建的 Group ID(GID)。

  • 实例化的代码中,NameServerAddr 没有配置正确。

  • 配置正确的 AccessKey。

  • 在当前实例下创建 GID。

  • Java SDK 1.8.0 及以上版本,推荐配置 NameServerAddr,此参数可从消息队列控制台获取,与之前版本配置的 ONSAddr 是不一致的。

com.aliyun.openservices.ons.api.impl.authority.exception.AuthenticationException: signature validate by dauth failed

AccessKey(包含 AccessKeyId 和 AccessKeySecret)配置错误。

AccessKey 要配置创建该 GID 使用的 AccessKey。

NettyClientPublicExecutor_3 - execute the pull request exceptioncom.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 26 DESC: subscription group [CID_XXX] does not exist,See http://rocketmq.apache.org/docs/faq/ for further details.

订阅关系没有推送到消息队列 Broker 上。

在subscription.json 文件里直接添加 GID 对应的信息即可。

execute the pull request exceptioncom.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 24 DESC: the consumer's subscription not exist

缺少订阅关系。

不涉及

Can not find name server with endpoint

一般是用户设置的 instanceId、endpoint 参数不正确。

配置正确的 instanceId、endpoint。

ERROR

No route info of this topic,TP_XXXXX

一般是连接了错误的 NameServer。

登录 NameServer 机器,执行 netstat -an|grep 9876 命令检查是否连接了正确的 NameServer,并配置正确的 NameServer。