开发者社区 > 云原生 > 云消息队列 > 正文

消息队列RocketMQ版Java 进程消息堆积严重是什么原因?

消息队列RocketMQ版Java 进程消息堆积严重是什么原因?

展开
收起
Lee_tianbai 2021-01-01 16:15:36 1252 0
1 条回答
写回答
取消 提交回答
  • 【排查步骤】: 1. 在消息队列 MQ 控制台 , 通过查看消费者状态获取消息堆积的消费者实例所 对应的宿主机 IP,并登录该宿主机或容器。 2. 执行以下任一命令查看进程 pid:

    - ps -ef |grep java
     - jps -lm
    
    1. 执行以下命令查看堆栈信息:
    - jstack -l pid > /tmp/pid.jstack
    
    1. 执行以下命令查看 ConsumeMessageThread 的信息,重点关注线程的状 态及堆栈:
    cat /tmp/pid.jstack|grep ConsumeMessageThread -A 10 –color
    

    只需要注意两种状态就可以。 - BLOCKED 此状态说明消费者线程被阻塞了,导致消息的消费被停滞了,从 而导致消息堆积的产生。这时要通过上面的堆栈信息来查看具体是阻塞在那个 接口。 - WAITING 这个状态要分两种情况来说明 image.png (1)如果是上图所显示的堆栈信息,说明消费者线程在等待消息消费,此为正常 状态。 (2)如果不是上图所显示的堆栈信息,可以重复上面的 3、4 两步,检查这个这 个消费者线程是否一直处于这种状态,而且堆栈信息显示也是一样的。这个 现象说明在消费逻辑的代码中,由于某种资源紧张,导致获取这种资源的时 间较长,从而导致消息消费的耗时增长,TPS 下降,消息消费的速度跟不上 消息生产的速度,从而导致消息堆积。

    2021-01-05 14:23:57
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
    The Reactive Cloud Native Arch 立即下载
    JAVA开发手册1.5.0 立即下载