1

我们运营两个双节点代理,每个代理都有完全不同的队列和工作负载。每个盒子有 24 个核心 (H/T) 的 Xeon E5645 @ 2.4GHz 和 48GB RAM,通过千兆 LAN 连接,延迟约 150μs,运行 RHEL 5.6、RabbitMQ 3.1、Erlang R16B,HiPE 关闭。我们已经尝试过启用 HiPE,但它对性能没有明显影响,而且非常崩溃。

对于输入和输出的 1,000/s 和 1,400/s 之间的消息速率,我们似乎已经达到了上限。这是代理范围的,而不是每个队列的。添加更多消费者并不能提高整体吞吐量,只会让特定队列在这个明显的资源“池”中占有更大的份额。

每个队列都在组成代理的两个节点上镜像。我们的发布者和消费者以持久的方式平等地连接到两个节点。我们也注意到速率中类似 ADSL 的不对称;如果我们设法发布大量消息,则传递率会下降到两位数。正如预期的那样,使用未镜像队列进行测试具有更高的吞吐量。队列和交换是持久的,消息不是持久的。

我们想知道我们可以做些什么来改善这种情况。盒子上的 CPU 很好,beam 为 1 个进程占用一个半核心,然后为另外几个进程占用两个核心各 80%。盒子的其余部分基本上是空闲的。我们在用户空间中使用约 20GB 的 RAM,其余部分由系统缓存填充。IO 速率很好。网络很好。

我们可以做任何 Erlang/OTP 调优吗?delegate_count 是默认的 16,有人可以更详细地解释一下这是做什么的吗?

4

1 回答 1

0

如果不了解更多关于您的生产者和消费者的配置方式、您正在使用的客户端库等等,这很难回答。正如一分钟前在 irc ( http://dev.rabbitmq.com/irclog/index.php?date=2013-05-22 )上讨论的那样,我建议您尝试使用 MulticastMain java 负载测试工具重现拓扑随 RabbitMQ java 客户端一起提供。您可以配置多个生产者/消费者、消息大小等。我当然可以在我的桌面上从具有 HA 的两节点集群中获得 5Khz,因此这可能是与客户端(或应用程序代码)相关的问题。

于 2013-05-22T09:48:19.890 回答