RocketMQ报错:【wait response on the channel<>timeout,3000(ms)】【close the connection to remote address】

问题描述

困扰了一年多的问题终于解决了,主要是这些报错信息均不回影响正常的消息消费!!!总结了有以下几种现象:

1、每次服务实例重启,都会频繁报【wait response on the channel <xx.xx.xx.xx::9876> timeout, 3000(ms)

】这个错误,需要重启多次,才可以启动成功。

2、rocketmq客户端日志经常有大量报错,报错信息如下:【wait response on the channel<xx.xx.xx.xx::9876>timeout,3000(ms)】

3、日志中发现经常有大量的连接通道超时的异常记录:【close the connection to remote address[xx.xx.xx.xx:9876] result: true】

2024-05-08T23:35:35.336|[order-service,,] [NettyClientSelector_1] [INFO] RocketmqRemoting - closeChannel: close the connection to remote address[xx.xx.xx.xx:9876] result: true

资源情况

RocketMQ 客户端和服务端版本号4.9.3

3个nameserver,双主

服务实例为容器部署

问题排查

1、查看rocketmq日志

在rocketmq_client.log日志文件中发现有不停的开、不停的关的记录

2、查看jvm

监控JVM的内存使用情况,发现有频繁的FULL GC,每次FULL GC平均耗时4s左右,频繁的full gc导致RocketMQ服务连接不稳定,严重影响了系统的性能,甚至导致消费线程卡顿

累计372天,FGC次数是442w次,时间是16039743s≈4000+h,平均每次FGC要停顿4s。所以一直会报3s的超时错误

查看MQ集群启动的内存配置参数为:-Xms=16g -Xmx=16g -Xmn=16g,其中初始堆大小和最大堆大小设置为16g,确保JVM启动时能分配足够的内存,但是Xmn=16g年轻代大小设置了16g,可能会由于年轻代占用大量内存,没有分配老年代内存,从而触发频繁的FULL GC。

JVM内存配置参数一般会将年轻代的大小设置为堆大小的1/3到1/2之间,重新评估内存需求,优化JVM的启动配置参数为:-Xms=16g -Xmx=16g -Xmn=8g

完成MQ集群的配置参数优化和重启,集群连接正常,未出现连接超时的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值