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

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

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

展开
收起
Lee_tianbai 2021-01-01 16:15:36 1198 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
    赞同 展开评论 打赏

多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖多行业。

相关产品

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

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载