问题描述

消息队列RocketMQ版控制台的消费者状态页面,Group ID的实时消息堆积量的值高于预期,且性能明显下降。

问题原因

由于JAVA进程的消息堆积过多,导致Group ID的实时消息堆积量的值高于预期。

解决方法

若JAVA进程消息堆积,且性能有下降的情况,可采取以下措施处理:

  1. 登录消息队列 RocketMQ 版控制台
  2. 参见查看消费者状态获取消息堆积的消费者实例所对应的宿主机IP地址,并登录该宿主机或容器。
  3. 执行以下任意命令,查看并记录JAVA进程的PID。
    ps -ef |grep java
    jps -lm
  4. 执行以下命令,查看堆栈信息。
    jstack -l pid > /tmp/pid.jstack
  5. 执行以下命令,查看ConsumeMessageThread的信息。
    cat /tmp/pid.jstack|grep ConsumeMessageThread -A 10 --color
    系统显示类似如下,重点关注线程的状态及堆栈。

    说明:线程状态的解释说明请参见Java官方文档

更多信息

除了异步解耦功能,消息队列RocketMQ版还有抵挡前端数据洪峰的重要功能,以此保证后端系统的稳定性。这要求消息队列RocketMQ版具有一定的消息堆积能力。消息队列RocketMQ版能支持10亿级别的消息堆积,不会因为消息堆积导致性能明显下降。若按照以上操作还未解决因消息堆积而导致的性能下降问题,请提交工单。提交工单时,请附带以下信息。

  • heap.bin文件。
    说明:
    • 该文件可通过执行 jmap -dump:format=b,file=heap.bin [$PID]命令获取,然后再执行gzip heap.bin命令生成压缩包。
    • [$PID]为步骤2记录的JAVA进程的PID。
  • 发生消息堆积的消费者客户端ons.log本地日志。
  • 消费者客户端的版本。

适用于

  • 消息队列RocketMQ版

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。