Потоки Spring JmsTemplate Daemon, которые остаются в живых после остановки приложения tomcat

Я отправляю сообщение в IBM WebSphere MQ(версия mq jar 7.0.1.9 и javax.jms 1.1) с использованием класса Spring JmsTemplate из моего веб-приложения.

Фабрика соединения, которую я использую, является MQQueueConnectionFactory.

Следующие потоки демона создаются при выполнении send() в JmsTempalte и при создании экземпляра MQQueueConnectionFactory.

ПРОБЛЕМА

Я получаю сообщение в командной строке tomcat, показывающее эти три потока как утечки памяти, когда я останавливаю веб-приложение на странице администрирования tomcat. Темы демона

ОТ JCONSOLE

РЕЗЬБА 1

Имя: JMSCCThreadPoolMaster Состояние: Ожидание на java.lang.Object@9f6e3e9 Всего заблокировано: 3 Всего осталось: 4

Трассировка стека: java.lang.Object.wait(собственный метод) java.lang.Object.wait(Object.java:485) com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$WorkQueueManagerThread.waitForNotification. (java:651) com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$WorkQueueManagerThread.waitForNotification(WorkQueueManagerImplementation.java:621) com.ibm.msg.client.commonreadworkueananMueQuean WorkQueueManagerImplementation.java:887)

РЕЗЬБА 2

Имя: JMSCCThreadPoolWorker-2 Состояние: Ожидание на com.ibm.mq.jmqi.remote.internal.RemoteReconnectThread$ReconnectMutex@3d3c3e45 Всего заблокировано: 0 Всего ожидали: 1

Трассировка стека: java.lang.Object.wait(собственный метод) java.lang.Object.wait(Object.java:485) com.ibm.mq.jmqi.remote.internal.RemoteReconnectThread.bestHconn(RemoteReconnectThread.java:672) com.ibm.mq.jmqi.remote.internal.RemoteReconnectThread.run(RemoteReconnectThread.java:129) com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask(WorkQueueItem.java:209) com.ibm.g.client.commonservices.workqueue.SimpleWorkQueueItem.runItem(SimpleWorkQueueItem.java:100) com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run(WorkQueueItem.java:224) com.ibm.msg.ecueent.com.WorkQueueManager.runWorkQueueItem(WorkQueueManager.java:298) com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$ThreadPoolWorker.run(WorkQueueManagerImplementation.java:12)

РЕЗЬБА 3 (Умирает через минуту)

ЭТО ОДИН создается при создании MQQueueConnectionFactory

Имя: WebSphere MQ Trace Monitor Состояние: TIMED_WAITING Всего заблокировано: 0 Всего осталось: 5

Трассировка стека: java.lang.Thread.sleep(собственный метод) com.ibm.mq.commonservices.internal.monitor.TraceMonitor.run(TraceMonitor.java:134)

Как сделать так, чтобы эти потоки демонов умерли.

2 ответа

Решение

Мой контекст Spring не закрывался должным образом, и фабрика JMS-соединений управлялась моим контейнером Spring, поэтому это вызвало утечку.

Я считаю, что проблема в клиентских банках WMQ, а не весной. Удалите клиентские файлы из приложения и предоставьте их на более высоком уровне загрузчика классов, например, скопировав их в папку tomcat / lib. Это не решит проблему, но обойдет ее, так как все приложения будут иметь общую базу, и при перезапуске приложений утечки не произойдет.

Другие вопросы по тегам