mq获取消息慢_rabbitmq消息发送卡顿的排查(spring-amqp)

线上系统因rabbitmq消息发送卡顿引发慢请求告警,排查发现非rabbitmq服务器流控引起,而是spring-amqp的CachingConnectionFactory在创建连接时的同步锁问题。解决方案是使用RoutingConnectionFactory,通过业务场景码隔离连接,避免相互影响,同时保持性能。
摘要由CSDN通过智能技术生成

问题描述

线上系统出现SLOW慢请求告警,经排查,发现为rabbitmq的消息发送卡顿引起,卡顿时间几秒钟~几十秒不等。由于只卡顿了1分钟左右,笔数不多(30笔以内),且后续就没了,所以只是排查了下系统各项指标(JVM、mq状态、磁盘等),都正常。就没有继续深入了排查了。 但过了一段时间,又出现问题了~~(果然每个线上问题都要仔细追踪- -#)

发生频率:每次系统重启后,都会出现一次,且每个实例出现一次后,后续就不在出现了,直到下一次系统实例重启。 在出现卡顿时,当前实例仍有其他的消息发送是正常的。

单个消息大小:1KB以内。

使用情况描述

rabbitmq:3.7.17, erlang:22.0.7

采用spirng-amqp包进行封装与rabbitmq的交互,版本为1.7.3.RELEASE

使用Spring-amqp的CachingConnectionFactory缓存连接工厂

调整生产者的cache-mode为Connection模式(原先为CHANNEL)

调整生产者的核心连接数量为24个,最大连接数量为48个

设置生产者连接的channel.checkout-timeout为3秒(该参数的旨意是从CachingConnectionFactory获取connection/channel的等待时间,CachingConnectionFactory实际就是个connection或者channel的缓存池子)

排查一: rabbitmq的per-connection连接流控引起的客户端消息发送卡顿

由于通过日志已经能够确定是消息发送这一步产生了卡顿,那初步怀疑就是由于rabbitmq的流控机制引起的卡顿,但根据监控,当时卡顿时间内,rabbitmq的所有connection/channel的状态都是正常的,没有存在flow/block状态的情况。(rabbitmq的监控API:{rabbitmq-admin管理后台域名}/api/index.html)

所以排除是rabbitmq服务器的流控引起的

排查二: 应用客户端自己的问题

由于出现问题是某次spring-amqp的缓存模式cache-mode从channel改为了connection(PS:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值