Wildfly 10 Final无限期地创建ActiveMQ-client-global-threads

时间:2016-02-21 14:46:18

标签: jms activemq jconsole wildfly-10

我有一个Wildfly AS JMS设置,我用Jconsole监视它,并注意到在我甚至在ConsumerProducer上创建会话之前,线程数是稳定的增加,我以前使用Wildfly 9 final用于相同的目的,即使在使用过程中它的线程使用也很稳定,但它有内存泄漏,这促使我升级。

Jconsole我可以看到:

Thread-2(ActiveMQ-client-global-threads-3258368)
Thread-4(ActiveMQ-client-global-threads-3258368)
Thread-5(ActiveMQ-client-global-threads-3258368)
Thread-6(ActiveMQ-client-global-threads-3258368)
.
.
.
Thread-16(ActiveMQ-client-global-threads-3258368)

我该如何解决这个问题?是否有一个我可以更改的设置导致这些线程产生,我可以从Jconsole获取更多信息来帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

更新: 我尝试使用这种配置,它对我不起作用。 原因是ActiveMq Artemis使用固定的线程池执行程序,并配置为500个线程。它将在Artemis的somoe变化后在Wildfly中解决。 您可以在Jira中查看状态(查看上一条评论):

https://issues.jboss.org/browse/JBEAP-2947

论坛:

https://developer.jboss.org/thread/268397

解决方法:

sh standalone.sh -c standalone-full.xml -Dactivemq.artemis.client.global.thread.pool.max.size=30

原始答案:

您是否尝试过设置远程连接属性?

 <connection-factory name="RemoteConnectionFactory"
 entries="java:jboss/exported/jms/RemoteConnectionFactory"
 connectors="http-connector" use-global-pools="false"
 thread-pool-max-size="10"/>

答案 1 :(得分:0)

您可以针对特定用例微调 MDB,只需根据预期限制将属性 useGlobalPools 设置为 false 和 threadPoolMaxSize

@MessageDriven(activationConfig = { 
    @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "queue/emailQueue"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "useGlobalPools", propertyValue = "false"),
    @ActivationConfigProperty(propertyName = "threadPoolMaxSize", propertyValue = "20"),
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })

如果您设置了连接工厂属性 use-global-pools="false"thread-pool-max-size="20" 在 standalone.xml 中,甚至作为 VM 参数传递,您都将全局行为应用于所有 MDB,这可能不是一个好主意。