【问题标题】:why my rabbitmq cluster connections and channels stay in flow status为什么我的rabbitmq集群连接和通道保持流状态
【发布时间】:2017-03-09 08:05:53
【问题描述】:

这些天我正在测试我的 rabbitmq 3 节点集群, 我用java工具测试,

[root@server-42 bin ]$ ./runjava  com.rabbitmq.perf.PerfTest -x1 -y1 -e testex -Hmqp://username:password@123.123.123.2/test' -t topic -k sample.info -s 1500 -i 20
id: test-154506-639, starting consumer #0
id: test-154506-639, starting consumer #0, channel #0
id: test-154506-639, starting producer #0
id: test-154506-639, starting producer #0, channel #0
id: test-154506-639, time: 20.000s, sent: 8913 msg/s, received: 8804 msg/s, min/avg/max latency: 6317/251907/727492 microseconds
id: test-154506-639, time: 40.004s, sent: 8993 msg/s, received: 8991 msg/s, min/avg/max latency: 157294/256691/387926 microseconds
id: test-154506-639, time: 60.011s, sent: 9029 msg/s, received: 9019 msg/s, min/avg/max latency: 146744/255631/384696 microseconds
id: test-154506-639, time: 80.017s, sent: 8946 msg/s, received: 8972 msg/s, min/avg/max latency: 164969/259147/723908 microseconds
id: test-154506-639, time: 100.019s, sent: 8971 msg/s, received: 8949 msg/s, min/avg/max latency: 164012/258115/353767 microseconds

我发现我的 rabbitmq 连接和通道状态保持在流状态。 但是为什么会这样?有什么办法可以提高性能?

我认为流状态保持发布者快速发送消息,以防服务器无法将消息排队。

但是我以前测试的发送率好像一点都不高,为什么还处于流状态?

有人可以帮忙吗?提前致谢。

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    Flow Control:

    RabbitMQ 将降低发布速度太快而队列无法跟上的连接速度。

    如果您想了解更多关于信用流的信息,您可以阅读此doc,尤其是:

    要了解 credit_flow 及其设置如何影响发布,让我们看看内部消息在 RabbitMQ 中是如何流动的。请记住,RabbitMQ 是在 Erlang 中实现的,其中进程通过相互发送消息进行通信。

    你可以尝试增加credit_flow参数

    【讨论】:

    • 谢谢加布里埃尔,
    • 谢谢加布里埃尔。我阅读了文档链接,但我有一些不清楚的地方。假设 rabbitmq set credit_flow_default_credit by default InitialCredit 默认设置为 200,MoreCreditAfter 设置为 50,那么它会出现一个带有 2 个队列(q1 和 q2)的通道,那么该通道将启动 200 * 2 信用?那正确吗?如果每个队列发送了 50 条消息,它将向通道返回 50 个信用,不是吗?
    • 假设 q1 非常慢,无法再向频道返还任何信用,但 q2 足够快,可以快速返还信用。这样 q2 就可以向频道授予信用,并且该频道不会被阻止对吗?因此,我是否可以说,如果一个连接有多个通道(或一个通道有多个队列),它不太可能阻塞连接或通道(因为如果一个通道或队列更快,它能够授予信用给上游)。
    • 如果您想了解有关内部结构的更多信息,请阅读此github.com/rabbitmq/internals/blob/master/deliver_to_queues.md
    【解决方案2】:

    在我的情况下,我得到这个是由于内存不足(太多未确认的消息导致内存已满,从而使连接处于流状态)

    【讨论】:

      猜你喜欢
      • 2019-02-28
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多