Wildfly 10 Final 无限期创建 ActiveMQ-client-global-threads
Wildfly 10 Final indefinitely creating ActiveMQ-client-global-threads
我有一个 JMS 的 Wildfly AS
设置,我正在使用 Jconsole 监视它并且注意到在我什至在我的 Consumer
或 Producer
上创建会话之前线程数正在稳步增加,我之前使用 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
获取更多信息来帮助我解决这个问题?
更新:
我尝试使用此配置,但它对我不起作用。
原因是 ActiveMq Artemis 使用固定的线程池执行器,并配置为 500 个线程。在 Artemis 中进行一些修改后,将在 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"/>
您可以针对特定用例微调 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 的全局行为,这可能不是一个好主意。
我有一个 JMS 的 Wildfly AS
设置,我正在使用 Jconsole 监视它并且注意到在我什至在我的 Consumer
或 Producer
上创建会话之前线程数正在稳步增加,我之前使用 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
获取更多信息来帮助我解决这个问题?
更新: 我尝试使用此配置,但它对我不起作用。 原因是 ActiveMq Artemis 使用固定的线程池执行器,并配置为 500 个线程。在 Artemis 中进行一些修改后,将在 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"/>
您可以针对特定用例微调 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 的全局行为,这可能不是一个好主意。