【java】RocketMQ broker busy 问题

  1. 公司用的是rocketmq消息中间件,随着业务量的增长,最近偶尔会报:[TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: 206ms, size of queue: 5

我已经做了版本升级,升到4.2,在网上做了大量搜索,都是泛泛而谈,改配置:waitTimeMillsInSendQueue=300 #或者更大
sendMessageThreadPoolNums=64
useReentrantLockWhenPutMessage=true

但是这样没有解决根本问题,因为我修改为300,还会出现大于300ms的报错。总不能之一把waitTimeMillsInSendQueue参数往大修改。
通过运维监控,查看了报错时,CPU确实占用上升,但还没达到50%,内存也并未占满。IO有较小波动。

但这些都不能直接导致那个问题,本人查看了rocketmq源码,使用了MappedByteBuffer,想知道是不是这里的性能问题,MappedByteBuffer有没有什么性能问题?(网上也没有找到实质性答案)

有过同样问题的大神,或者rocketmq研究比较深的,帮忙解答一下。非常感谢!!!

回答

我看了下源码,这个错误对应四种队列:

  1. sendMessageExecutor 的 queue
  2. pullMessageExecutor 的 queue
  3. heartbeatExecutor 的 queue
  4. endTransactionExecutor 的queue

你的CPU和内存都没有满负荷,IO有抖动,我猜可能的原因是IO负荷过大导致写线程阻塞,处理速度过慢导致超时。

参考:https://www.e-learn.cn/conten...

这是个很奇怪的问题,压测压倒吞吐量2万了,没有复现问题。实际线上运行,就会偶尔报,waitTimeMillsInSendQueue一开始默认200,我改为300,又会报超过300ms的错误,我现在改为400ms,还会报400ms的问题。。。。没有头绪。
日志如下图:

【java】RocketMQ broker busy 问题

以上是 【java】RocketMQ broker busy 问题 的全部内容, 来源链接: utcz.com/a/75249.html

回到顶部