Erlang 镜像队列性能因素

Erlang 镜像队列性能因素,erlang,rabbitmq,Erlang,Rabbitmq,我们操作两个双节点代理,每个代理具有完全不同的队列和工作负载。每个机箱有24个核心(H/T)的Xeon E5645@2.4GHz,带48GB RAM,通过千兆LAN连接,延迟约150μs,运行RHEL 5.6、RabbitMQ 3.1、Erlang R16B和HiPE关闭。我们已经尝试了HiPE,但没有明显的性能影响,而且非常粗糙 我们似乎已经达到了1000/s到1400/s的消息传输速率上限。这是代理范围的,而不是每个队列。添加更多的使用者并不能提高总体吞吐量,只会使特定队列在这一明显的“资源

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

我们似乎已经达到了1000/s到1400/s的消息传输速率上限。这是代理范围的,而不是每个队列。添加更多的使用者并不能提高总体吞吐量,只会使特定队列在这一明显的“资源池”中占有更大的份额

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

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


我们可以进行Erlang/OTP调优吗?委托计数是默认的16,有人能更详细地解释一下这是怎么做的吗?

如果不知道生产者和消费者是如何配置的,您使用的是哪个客户端库等等,就很难回答这个问题。正如一分钟前在irc()上所讨论的,我建议您尝试使用RabbitMQ java客户机附带的MulticastMain java负载测试工具复制拓扑。您可以配置多个生产者/消费者、消息大小等。我的桌面上有HA的双节点集群当然可以获得5Khz的带宽,因此这可能是一个与客户端(或应用程序代码)相关的问题