消息队列RocketMQ版Java 进程消息堆积严重是什么原因?
【排查步骤】: 1. 在消息队列 MQ 控制台 , 通过查看消费者状态获取消息堆积的消费者实例所 对应的宿主机 IP,并登录该宿主机或容器。 2. 执行以下任一命令查看进程 pid:
- ps -ef |grep java
- jps -lm
- jstack -l pid > /tmp/pid.jstack
cat /tmp/pid.jstack|grep ConsumeMessageThread -A 10 –color
只需要注意两种状态就可以。 - BLOCKED 此状态说明消费者线程被阻塞了,导致消息的消费被停滞了,从 而导致消息堆积的产生。这时要通过上面的堆栈信息来查看具体是阻塞在那个 接口。 - WAITING 这个状态要分两种情况来说明 (1)如果是上图所显示的堆栈信息,说明消费者线程在等待消息消费,此为正常 状态。 (2)如果不是上图所显示的堆栈信息,可以重复上面的 3、4 两步,检查这个这 个消费者线程是否一直处于这种状态,而且堆栈信息显示也是一样的。这个 现象说明在消费逻辑的代码中,由于某种资源紧张,导致获取这种资源的时 间较长,从而导致消息消费的耗时增长,TPS 下降,消息消费的速度跟不上 消息生产的速度,从而导致消息堆积。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/