首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MDB + ActiveMQ + Weblogic高负载

MDB + ActiveMQ + Weblogic高负载
EN

Stack Overflow用户
提问于 2020-12-13 20:28:59
回答 1查看 176关注 0票数 0

我有一个公司项目,我们使用EJB (MDB) + ActiveMQ (使用activemq-rar连接器连接到weblogic )+ Weblogic 12来处理使用队列的事务。我们的数据库是Oracle RAC,我们的模块基于3个MDB:

  1. 第一个MDB使用ActiveMQ中的队列接收来自外部资源的消息,并将这些消息放到其他队列中。第二个MDB接收来自#1的消息,存储在数据库中,并将消息放到另一个队列中。最后一个MDB
  2. 接收来自#2的消息,应用业务规则,存储在数据库中,并将消息路由到不同的主题(取决于某些常规规则)。

我们需要每秒存档700多条消息。我们有JMeter来测试负载。

我们在Weblogic和ActiveMQ中做了很多调优操作,在代码中做了很多修正,但是我们只能处理450个消息\秒。随着更多的加载,消息开始在最后一个队列中累积(上面的步骤3)。IT平台(Weblogic、ActiveMQ和数据库)就足够了。这不是问题所在。我们在CPU\RAM中的消耗低于30%,负载为450条消息\秒。

我们使用了许多ActiveMQ和Weblogic:

  1. Weblogic:

代码语言:javascript
复制
1. Self Tuning Thread Minimum Pool Size -> 0, 10, 100...200 threads
2. Self Tuning Thread Maximum Pool Size -> 100, 200, 800...1500 threads
3. JDBC (Oracle GridLink) with Initial Capacity (connections) of 100 and Max Capacity of 400,600..800

  1. MDBs:

代码语言:javascript
复制
1. Each MDB has initial-beans-in-free-pool = 10, 50, 100...200... in the `weblogic-ejb-jar.xml`
2. Each MDB has `maxSessions` = 100, 200, 400... activationProperty (for ActiveMQ) in the `ejb-jar.xml`

  1. ActiveMQ:

代码语言:javascript
复制
1. Openwire configured with more than 1000, 2000...5000 connections
2. Initial capacity (10, 50...100) and Max capacity(100,600...1000) in the ActiveMQ pool configured using ActiveMQ-rar (`weblogic-ra.xml`).

我们使用XA事务(AMQXAConnectionFactory)

不管我们如何增加所有这些值,结果总是一样的。我们使用VisualVM (JMX)检查了该软件,尽管许多线程完全处于空闲状态,但Weblogic并没有分配更多线程来处理消息。我们认为某些因素限制了我们的表现,但我们不知道它是什么。

我们使用所有这些值(增加、减少.),但我们无法提高我们的最佳结果(450条消息/秒)。我们完全迷路了。我们也尝试过在服务器上使用Workmanagers,但是我们得到了相同的结果。你能帮我一下吗?有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-12-13 21:58:21

如果您在每一步都使用持久消息和XA事务,那么瓶颈很可能是您的磁盘。确认持久消息需要与磁盘同步。发送持久消息需要同步到磁盘。更新XA事务日志可能需要2个同步到磁盘。显然,将数据持久化到数据库需要同步到磁盘。你在每一步都要做很多这样的事情,这会导致很多磁盘同步。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65280328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档