我有一个公司项目,我们使用EJB (MDB) + ActiveMQ (使用activemq-rar连接器连接到weblogic )+ Weblogic 12来处理使用队列的事务。我们的数据库是Oracle RAC,我们的模块基于3个MDB:
我们需要每秒存档700多条消息。我们有JMeter来测试负载。
我们在Weblogic和ActiveMQ中做了很多调优操作,在代码中做了很多修正,但是我们只能处理450个消息\秒。随着更多的加载,消息开始在最后一个队列中累积(上面的步骤3)。IT平台(Weblogic、ActiveMQ和数据库)就足够了。这不是问题所在。我们在CPU\RAM中的消耗低于30%,负载为450条消息\秒。
我们使用了许多ActiveMQ和Weblogic:
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..8001. 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. 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,但是我们得到了相同的结果。你能帮我一下吗?有什么想法吗?
发布于 2020-12-13 21:58:21
如果您在每一步都使用持久消息和XA事务,那么瓶颈很可能是您的磁盘。确认持久消息需要与磁盘同步。发送持久消息需要同步到磁盘。更新XA事务日志可能需要2个同步到磁盘。显然,将数据持久化到数据库需要同步到磁盘。你在每一步都要做很多这样的事情,这会导致很多磁盘同步。
https://stackoverflow.com/questions/65280328
复制相似问题