我们运营两个双节点代理,每个代理具有完全不同的队列和工作负载。每个盒子有24核(H / T)价值的Xeon E5645 @ 2.4GHz和48GB RAM,通过千兆局域网连接,延迟约150μs,运行RHEL 5.6,RabbitMQ 3.1,Erlang R16B,关闭HiPE。我们尝试使用HiPE,但它没有产生明显的性能影响,并且非常严重。
我们的消息速率似乎达到了上限,介于1,000 / s和1,400 / s之间。这是代理范围的,而不是每个队列。添加更多的消费者并不能提高总体吞吐量,只需将特定队列放在这个明显的“资源池”中。
每个队列都在构成代理的两个节点上进行镜像。我们的发布者和消费者以持久的方式同等地连接到两个节点。我们也注意到了类似ADSL的不对称性;如果我们设法发布高速率的消息,则传送速率降至高两位数。正如预期的那样,使用非镜像队列进行测试具有更高的吞吐量。队列和交换是持久的,消息不是永久性的。
我们想知道如何改善这种状况。盒子上的CPU很好,光束在一个过程中占据核心半,然后在另外两个过程中占据两个核心的80%。盒子的其余部分基本上是空闲的。我们在用户空间使用~20GB的RAM,其余的是系统缓存。 IO率很好。网络很好。
我们可以做任何Erlang / OTP调整吗? delegate_count是默认值16,有人可以更详细地解释一下它的作用吗?
答案 0 :(得分:0)
如果不了解您的生产者和消费者的配置方式,您正在使用的客户端库等等,这很难回答。正如一分钟前在irc(http://dev.rabbitmq.com/irclog/index.php?date=2013-05-22)上所讨论的那样,我建议你尝试使用RabbitMQ java客户端附带的MulticastMain java负载测试工具来重现拓扑。您可以配置多个生产者/消费者,消息大小等。我当然可以在桌面上使用HA的双节点群集中获得5Khz,因此这可能是客户端(或应用程序代码)相关的问题。