镜像队列性能因素



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

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

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

我们想知道我们能做些什么来改善这种情况。盒子上的CPU很好,beam为一个进程占用一个半内核,然后为另外几个进程占用两个内核的80%。盒子的其余部分基本上是闲置的。我们在用户区使用了大约20GB的RAM,其余的由系统缓存填充。IO速率很好。网络正常 有什么Erlang/OTP调优我们可以做吗?Delegate_count是默认的16,有人能更详细地解释一下这个做什么吗?

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

最新更新