Please don't re-post the same question multiple times. It won't get your
question answered any faster.
Mark
On 12/12/2022 06:20, alik alikov wrote:
Tomcat 9.0.65
When I try to shut down the application in the IDE console by 'q' application
doesn't stopped.
Thread Dump in attachments.
Console log:
dec 08, 2022 12:59:21 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio2-8080"]
dec 08, 2022 12:59:21 PM org.apache.tomcat.util.net.Nio2Endpoint bind
WARNING: The NIO2 connector requires an exclusive executor to operate properly
on shutdown
dec 08, 2022 12:59:48 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]
dec 08, 2022 12:59:48 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/9.0.65]
dec 08, 2022 12:59:48 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio2-8080"]
dec 08, 2022 12:59:49 PM org.apache.catalina.startup.ContextConfig
getDefaultWebXmlFragment
INFO: No global web.xml found
application started in SHELL mode
Press 'q' key to exit.
q
dec 08, 2022 1:18:18 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-nio2-8080"]
dec 08, 2022 1:18:18 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service [Tomcat]
dec 08, 2022 1:18:18 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-nio2-8080"] I think this happens because
we use http nio2 protocol, and we personally create an executor for him.
private void configureExecutor(final Connector connector, final String connectorName) { final
StandardThreadExecutor executor = new TomcatThreadExecutor(); executor.setName(connectorName); final
AbstractProtocol<?> protocol = (AbstractProtocol<?>) connector.getProtocolHandler();
String namePrefix = protocol.getName(); namePrefix = namePrefix.substring(1, namePrefix.length() -
1); executor.setNamePrefix(namePrefix + "-exec-");
executor.setMaxThreads(protocol.getMaxThreads());
executor.setMinSpareThreads(protocol.getMinSpareThreads());
tomcat.getEngine().getService().addExecutor(executor); protocol.setExecutor(executor); }
Also thread dump:
"Catalina-utility-2" #98 prio=1 os_prio=-2 tid=0x000000001c3dd800 nid=0x4d00 waiting
on condition [0x000000002418e000] java.lang.Thread.State: WAITING (parking) at
sun.misc.Unsafe.park(Native Method) - parking to wait for <0x0000000081fa93d0> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
at
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at
java.lang.Thread.run(Thread.java:748)
"Catalina-utility-1" #97 prio=1 os_prio=-2 tid=0x000000001c3e0800 nid=0x612c waiting
on condition [0x000000002408e000] java.lang.Thread.State: WAITING (parking) at
sun.misc.Unsafe.park(Native Method) - parking to wait for <0x0000000081fa93d0> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088)
at
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at
java.lang.Thread.run(Thread.java:748)
"Connection evictor" #95 daemon prio=5 os_prio=0 tid=0x000000001e76f800
nid=0x309c waiting on condition [0x0000000023c8f000] java.lang.Thread.State:
TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at
org.apache.http.impl.client.IdleConnectionEvictor$1.run(IdleConnectionEvictor.java:66) at
java.lang.Thread.run(Thread.java:748)
"Thread-22" #91 daemon prio=5 os_prio=0 tid=0x000000001e76a000 nid=0x6b4
runnable [0x00000000233be000] java.lang.Thread.State: RUNNABLE at
sun.nio.ch.Iocp.getQueuedCompletionStatus(Native Method) at
sun.nio.ch.Iocp.access$300(Iocp.java:46) at
sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:333) at
sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
"Thread-21" #90 daemon prio=5 os_prio=0 tid=0x000000001e769800 nid=0x3998
runnable [0x00000000232bf000] java.lang.Thread.State: RUNNABLE at
sun.nio.ch.Iocp.getQueuedCompletionStatus(Native Method) at
sun.nio.ch.Iocp.access$300(Iocp.java:46) at
sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:333) at
sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
"Thread-20" #89 daemon prio=5 os_prio=0 tid=0x000000001e765000 nid=0x6098
runnable [0x00000000231bf000] java.lang.Thread.State: RUNNABLE at
sun.nio.ch.Iocp.getQueuedCompletionStatus(Native Method) at
sun.nio.ch.Iocp.access$300(Iocp.java:46) at
sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:333) at
sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
"Thread-19" #88 daemon prio=5 os_prio=0 tid=0x000000001e762000 nid=0x4034
runnable [0x00000000230be000] java.lang.Thread.State: RUNNABLE at
sun.nio.ch.Iocp.getQueuedCompletionStatus(Native Method) at
sun.nio.ch.Iocp.access$300(Iocp.java:46) at
sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:333) at
sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
"Thread-18" #87 daemon prio=5 os_prio=0 tid=0x000000001e767000 nid=0x58cc
runnable [0x0000000022cbe000] java.lang.Thread.State: RUNNABLE at
sun.nio.ch.Iocp.getQueuedCompletionStatus(Native Method) at
sun.nio.ch.Iocp.access$300(Iocp.java:46) at
sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:333) at
sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
"Thread-17" #86 daemon prio=5 os_prio=0 tid=0x000000001e766800 nid=0x4d88
runnable [0x0000000022abe000] java.lang.Thread.State: RUNNABLE at
sun.nio.ch.Iocp.getQueuedCompletionStatus(Native Method) at
sun.nio.ch.Iocp.access$300(Iocp.java:46) at
sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:333) at
sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
"Thread-16" #85 daemon prio=5 os_prio=0 tid=0x000000001e768800 nid=0x35dc
runnable [0x00000000229bf000] java.lang.Thread.State: RUNNABLE at
sun.nio.ch.Iocp.getQueuedCompletionStatus(Native Method) at
sun.nio.ch.Iocp.access$300(Iocp.java:46) at
sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:333) at
sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
"Thread-15" #84 daemon prio=5 os_prio=0 tid=0x000000001e761000 nid=0x5d30
runnable [0x00000000228be000] java.lang.Thread.State: RUNNABLE at
sun.nio.ch.Iocp.getQueuedCompletionStatus(Native Method) at
sun.nio.ch.Iocp.access$300(Iocp.java:46) at
sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:333) at
sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
"Thread-14" #83 daemon prio=5 os_prio=0 tid=0x000000001e768000 nid=0x9e0
runnable [0x00000000227bf000] java.lang.Thread.State: RUNNABLE at
sun.nio.ch.Iocp.getQueuedCompletionStatus(Native Method) at
sun.nio.ch.Iocp.access$300(Iocp.java:46) at
sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:333) at
java.lang.Thread.run(Thread.java:748)
"mysql-cj-abandoned-connection-cleanup" #46 daemon prio=5 os_prio=0
tid=0x000000001c3e8000 nid=0x4dc4 in Object.wait() [0x0000000022fbf000] java.lang.Thread.State:
TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144) - locked
<0x000000008126dec8> (a java.lang.ref.ReferenceQueue$Lock) at
com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:80)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
.
.