我正在使用嵌入在 JBoss 6.1 应用服务器中的 HornetQ。我的应用程序(一个客户端应用程序,产生消息,以及使用它们的 JBoss 应用程序)在 CPU 仍处于 60% 空闲状态时无法在服务器上处理超过 4000 TPS。我试图删除持久性以检查我是否受磁盘限制,但它并没有提高吞吐量。
看来问题出在生产者方面。至少在监控队列大小时,它保持非常小,这意味着消费者不是瓶颈。
我应该使用多个队列来提高效率吗?我已经阅读了 HornetQ 的性能调整文档,但找不到原因。或者可能是因为我使用的是 AUTO_ACKNOWLEDGE 模式?我正在为生产者运行几个线程,这不会产生太大影响。无论如何,生产者 JVM 不能使用超过 1 个 CPU 线程。我什至尝试运行我的生产者应用程序的几个实例,但速度并不快。网络带宽很高(1 Gbps),我的消息非常小(< 1 KB)。此外,生产者和消费者应用程序在同一台服务器上运行。HornetQ 配置在 2 个服务器的 JBoss 集群中。