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研究比较深的,帮忙解答一下。非常感谢!!!

阅读 7.5k
2 个回答

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

  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的问题。。。。没有头绪。
日志如下图:

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题