首页 > 解决方案 > ActiveMQ - 当我想停止 Java 进程时它保持活动状态

问题描述

我有一个连接到 ActiveMQ(作为消费者)的 java 进程。当我试图干净地停止它时,它会导致问题。

该过程停止如下:

如果它还没有处理任何消息,该过程似乎可以正常关闭。但是一旦收到一条消息,该过程就不会停止,我不确定为什么(打印最终的日志消息)

我已经打印了一个线程转储来查看发生了什么,但我不确定是什么导致了这个问题:

Attaching to process ID 17264, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09
Deadlock Detection:

No deadlocks found.

Thread 20: (state = BLOCKED)
 - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
 - java.lang.ref.ReferenceQueue.remove(long) @bci=59 (Compiled frame)
 - java.lang.ref.ReferenceQueue.remove() @bci=2 (Compiled frame)
 - sun.java2d.Disposer.run() @bci=3 (Interpreted frame)
 - java.lang.Thread.run() @bci=11 (Interpreted frame)

Locked ownable synchronizers:
    - None

Thread 19: (state = BLOCKED)
 - sun.misc.Unsafe.park(boolean, long) @bci=0 (Interpreted frame)
 - java.util.concurrent.locks.LockSupport.parkNanos(java.lang.Object, long) @bci=20 (Interpreted frame)
 - java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(long) @bci=78 (Interpreted frame)
 - java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take() @bci=124 (Interpreted frame)
 - java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take() @bci=1 (Interpreted frame)
 - java.util.concurrent.ThreadPoolExecutor.getTask() @bci=149 (Interpreted frame)
 - java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) @bci=26 (Interpreted frame)
 - java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=5 (Interpreted frame)
 - java.lang.Thread.run() @bci=11 (Interpreted frame)

Locked ownable synchronizers:
    - None

Thread 18: (state = BLOCKED)
 - sun.misc.Unsafe.park(boolean, long) @bci=0 (Interpreted frame)
 - java.util.concurrent.locks.LockSupport.parkNanos(java.lang.Object, long) @bci=20 (Interpreted frame)
 - java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(long) @bci=78 (Interpreted frame)
 - java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take() @bci=124 (Interpreted frame)
 - java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take() @bci=1 (Interpreted frame)
 - java.util.concurrent.ThreadPoolExecutor.getTask() @bci=149 (Interpreted frame)
 - java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) @bci=26 (Interpreted frame)
 - java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=5 (Interpreted frame)
 - java.lang.Thread.run() @bci=11 (Interpreted frame)

Locked ownable synchronizers:
    - None

Thread 17: (state = BLOCKED)
 - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
 - java.util.TimerThread.mainLoop() @bci=201 (Interpreted frame)
 - java.util.TimerThread.run() @bci=1 (Interpreted frame)

Locked ownable synchronizers:
    - None

Thread 1: (state = BLOCKED)

Locked ownable synchronizers:
    - None

Thread 10: (state = BLOCKED)

Locked ownable synchronizers:
    - None

Thread 9: (state = BLOCKED)

Locked ownable synchronizers:
    - None

Thread 8: (state = BLOCKED)
 - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
 - java.lang.ref.ReferenceQueue.remove(long) @bci=59 (Compiled frame)
 - java.lang.ref.ReferenceQueue.remove() @bci=2 (Compiled frame)
 - java.lang.ref.Finalizer$FinalizerThread.run() @bci=36 (Interpreted frame)

Locked ownable synchronizers:
    - None

Thread 7: (state = BLOCKED)
 - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
 - java.lang.Object.wait() @bci=2 (Compiled frame)
 - java.lang.ref.Reference.tryHandlePending(boolean) @bci=54 (Compiled frame)
 - java.lang.ref.Reference$ReferenceHandler.run() @bci=1 (Interpreted frame)

Locked ownable synchronizers:
   - None

就我所见,

ActiveMQ 版本: 5.15.4

ActiveMQConnectionFactory url:故障转移:(tcp://localhost:61616)?timeout=3000&maxReconnectAttempts=10

无其他具体参数

标签: javamultithreadingprocessactivemqshutdown

解决方案


推荐阅读