Wildfly 10 Final бесконечно создает ActiveMQ-client-global-threads

У меня есть настройка Wildfly AS для JMS, я отслеживаю ее с помощью 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, чтобы помочь мне решить эту проблему?


person JTK    schedule 21.02.2016    source источник
comment
У меня такая же проблема... Вы решили эту проблему?   -  person Ariel Carrera    schedule 07.03.2016


Ответы (2)


Обновление: я пробовал с этой конфигурацией, и она у меня не работает. Причина в том, что ActiveMq Artemis использует исполнителя с фиксированным пулом потоков и настроен на 500 потоков. Это будет решено в Wildfly после некоторых изменений в Artemis. Проверить статус можно в 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"/>
person Ariel Carrera    schedule 07.03.2016
comment
Это было решение, которое я нашел на форумах Jboss, я планировал вернуться и ответить на вопрос, вы избавили меня от проблем, спасибо за ваш вклад. - person JTK; 08.03.2016
comment
Привет, Джонтк. Я обновил ответ после разговора с командой wildfly. С Уважением - person Ariel Carrera; 09.03.2016
comment
Это решение действительно решило проблемы для меня, я использую wildfly 10 CR4. - person JTK; 10.03.2016
comment
Хорошо Джонтк! Я пытался с этим, и я не могу решить свою проблему... но этот параметр работает для меня: sh standalone.sh -c standalone-full.xml -Dactivemq.artemis.client.global.thread.pool.max.size= 30 - person Ariel Carrera; 10.03.2016
comment
Просто хотел заявить, что у нас была та же проблема с Artemis, пережевывавшей нашу память в Wildfly 10. Мы решили ее, добавив блок artemis thread.pool.max.size в wildfly/bin/standalone.conf. Inside the default if`, проверяющий параметры Java, мы добавили, JAVA_OPTS="$JAVA_OPTS -Dactivemq.artemis.client.global.thread.pool.max.size=100" - person BRasmussen; 03.08.2018
comment
Ok! @BRasmussen! Переменная JAVA_OPTS является хорошей точкой для установки такого рода параметров командной строки, передаваемых виртуальной машине Java во время инициализации wildfly, настроек памяти и т. д. Хороший момент. - person Ariel Carrera; 06.08.2018

Вы можете точно настроить 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 или даже передадите их в качестве аргумента виртуальной машины, у вас будет глобальное поведение, применяемое ко всем MDB, возможно, это не очень хорошая идея.

person Renato A. Guimarães    schedule 08.06.2021