Describe the bug
When using Spring Boot with virtual threads enabled, a request that triggers MediaTypeFactory class initialization can cause permanent thread blocking. The issue occurs because the static initializer of MediaTypeFactory calls parseMimeTypes(), which reads a resource from the application's nested jar via NestedJarFile.hasEntry(). This method is synchronized and may block indefinitely if the lock on the underlying UrlNestedJarFile instance cannot be acquired or released properly under certain conditions.
After the initializing thread hangs, all requests will also hang waiting for the class initialization monitor, effectively freezing the application.
Steps to Reproduce
- Create a Spring Boot application (version 4.1.0) with virtual threads enabled.
- Make a request that returns a response body where content negotiation requires media type resolution.
- Under concurrent load (multiple simultaneous requests), some virtual threads get stuck permanently.
Expected behavior
The class initialization should complete quickly without hanging. All requests should be served normally.
Actual behavior
Two virtual threads become blocked:
- One thread is inside
MediaTypeFactory.<clinit> → parseMimeTypes() → ... → NestedJarFile.hasEntry() trying to acquire a lock on a UrlNestedJarFile instance.
- Another thread (and any subsequent ones) are blocked waiting for the class initialization monitor of
MediaTypeFactory.
This leads to a total service stall after the first few requests.
Sample Thread Dump
Full thread dump OpenJDK 64-Bit Server VM (25.0.1+8-LTS mixed mode, sharing):
Threads class SMR info:
_java_thread_list=0x00007faa1037b6b0, length=43, elements={
0x00007faa680f6b70, 0x00007faa680f83a0, 0x00007faa680f9df0, 0x00007faa680fb710,
0x00007faa680fcf90, 0x00007faa680fed90, 0x00007faa68100780, 0x00007faa6811cad0,
0x00007faa6811fa80, 0x00007faa68192960, 0x00007faa68d1a5f0, 0x00007faa68d1afe0,
0x00007faa695fe4e0, 0x00007faa2801a300, 0x00007faa696077d0, 0x00007faa681a8630,
0x00007faa6972cee0, 0x00007faa69969350, 0x00007faa69d67b50, 0x00007faa69d68a30,
0x00007faa69d69b30, 0x00007faa69d9ea60, 0x00007faa69ea0740, 0x000055ce66f4a160,
0x000055ce66f4b460, 0x00007faa68a11a30, 0x00007faa68a122e0, 0x00007faa2024f5f0,
0x00007faa20178150, 0x00007faa6a353470, 0x00007faa6a610300, 0x00007faa69b9b4e0,
0x00007faa69b9c610, 0x00007faa6810e6a0, 0x00007faa24009930, 0x00007faa68112f10,
0x00007faa24090f00, 0x00007faa24092530, 0x00007faa2420d0a0, 0x00007faa6810c650,
0x00007faa6802aa00, 0x00007faa3c00b220, 0x00007faa2408ac80
}
"Reference Handler" #12 [2790883] daemon prio=10 os_prio=0 cpu=11.92ms elapsed=60550.47s tid=0x00007faa680f6b70 nid=2790883 waiting on condition [0x00007faa6d21b000]
java.lang.Thread.State: RUNNABLE
at java.lang.ref.Reference.waitForReferencePendingList(java.base@25.0.1/Native Method)
at java.lang.ref.Reference.processPendingReferences(java.base@25.0.1/Reference.java:246)
at java.lang.ref.Reference$ReferenceHandler.run(java.base@25.0.1/Reference.java:208)
Locked ownable synchronizers:
- None
"Finalizer" #13 [2790884] daemon prio=8 os_prio=0 cpu=0.13ms elapsed=60550.47s tid=0x00007faa680f83a0 nid=2790884 in Object.wait() [0x00007faa6cdfe000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait0(java.base@25.0.1/Native Method)
- waiting on <0x00000000e002c1f0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.Object.wait(java.base@25.0.1/Object.java:389)
at java.lang.Object.wait(java.base@25.0.1/Object.java:351)
at java.lang.ref.ReferenceQueue.remove0(java.base@25.0.1/ReferenceQueue.java:137)
at java.lang.ref.ReferenceQueue.remove(java.base@25.0.1/ReferenceQueue.java:215)
- locked <0x00000000e002c1f0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.Finalizer$FinalizerThread.run(java.base@25.0.1/Finalizer.java:165)
Locked ownable synchronizers:
- None
"Signal Dispatcher" #14 [2790885] daemon prio=9 os_prio=0 cpu=0.24ms elapsed=60550.47s tid=0x00007faa680f9df0 nid=2790885 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Service Thread" #15 [2790886] daemon prio=9 os_prio=0 cpu=662.54ms elapsed=60550.47s tid=0x00007faa680fb710 nid=2790886 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Monitor Deflation Thread" #16 [2790887] daemon prio=9 os_prio=0 cpu=2398.37ms elapsed=60550.47s tid=0x00007faa680fcf90 nid=2790887 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"C2 CompilerThread0" #17 [2790888] daemon prio=9 os_prio=0 cpu=30655.80ms elapsed=60550.47s tid=0x00007faa680fed90 nid=2790888 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
Locked ownable synchronizers:
- None
"C1 CompilerThread0" #18 [2790889] daemon prio=9 os_prio=0 cpu=5955.40ms elapsed=60550.47s tid=0x00007faa68100780 nid=2790889 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
Locked ownable synchronizers:
- None
"Notification Thread" #19 [2790890] daemon prio=9 os_prio=0 cpu=26.61ms elapsed=60550.46s tid=0x00007faa6811cad0 nid=2790890 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Common-Cleaner" #20 [2790891] daemon prio=8 os_prio=0 cpu=29.13ms elapsed=60550.46s tid=0x00007faa6811fa80 nid=2790891 in Object.wait() [0x00007faa6c6f7000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait0(java.base@25.0.1/Native Method)
- waiting on <no object reference available>
at java.lang.Object.wait(java.base@25.0.1/Object.java:389)
at java.lang.ref.ReferenceQueue.remove0(java.base@25.0.1/ReferenceQueue.java:123)
at java.lang.ref.ReferenceQueue.remove(java.base@25.0.1/ReferenceQueue.java:201)
- locked <0x00000000e002c4c0> (a java.lang.ref.ReferenceQueue$Lock)
at jdk.internal.ref.CleanerImpl.run(java.base@25.0.1/CleanerImpl.java:146)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
at jdk.internal.misc.InnocuousThread.run(java.base@25.0.1/InnocuousThread.java:148)
Locked ownable synchronizers:
- None
"Cleaner-0" #21 [2790893] daemon prio=8 os_prio=0 cpu=41.96ms elapsed=60550.34s tid=0x00007faa68192960 nid=2790893 in Object.wait() [0x00007faa6c5f6000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait0(java.base@25.0.1/Native Method)
- waiting on <no object reference available>
at java.lang.Object.wait(java.base@25.0.1/Object.java:389)
at java.lang.ref.ReferenceQueue.remove0(java.base@25.0.1/ReferenceQueue.java:123)
at java.lang.ref.ReferenceQueue.remove(java.base@25.0.1/ReferenceQueue.java:201)
- locked <0x00000000e002c560> (a java.lang.ref.ReferenceQueue$Lock)
at jdk.internal.ref.CleanerImpl.run(java.base@25.0.1/CleanerImpl.java:146)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
at jdk.internal.misc.InnocuousThread.run(java.base@25.0.1/InnocuousThread.java:148)
Locked ownable synchronizers:
- None
"AsyncAppender-Worker-ASYNC_CONSOLE" #24 [2790931] daemon prio=5 os_prio=0 cpu=2.31ms elapsed=60547.50s tid=0x00007faa68d1a5f0 nid=2790931 waiting on condition [0x00007faa6c3f4000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000e002c6f0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(java.base@25.0.1/LockSupport.java:369)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@25.0.1/AbstractQueuedSynchronizer.java:520)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@25.0.1/ForkJoinPool.java:4364)
at java.util.concurrent.ForkJoinPool.managedBlock(java.base@25.0.1/ForkJoinPool.java:4310)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@25.0.1/AbstractQueuedSynchronizer.java:1752)
at java.util.concurrent.ArrayBlockingQueue.take(java.base@25.0.1/ArrayBlockingQueue.java:421)
at ch.qos.logback.core.AsyncAppenderBase$Worker.run(AsyncAppenderBase.java:298)
Locked ownable synchronizers:
- None
"AsyncAppender-Worker-ASYNC_FILE" #25 [2790932] daemon prio=5 os_prio=0 cpu=11.87ms elapsed=60547.50s tid=0x00007faa68d1afe0 nid=2790932 waiting on condition [0x00007faa6c2f3000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000e002c8f0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(java.base@25.0.1/LockSupport.java:369)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@25.0.1/AbstractQueuedSynchronizer.java:520)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@25.0.1/ForkJoinPool.java:4364)
at java.util.concurrent.ForkJoinPool.managedBlock(java.base@25.0.1/ForkJoinPool.java:4310)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@25.0.1/AbstractQueuedSynchronizer.java:1752)
at java.util.concurrent.ArrayBlockingQueue.take(java.base@25.0.1/ArrayBlockingQueue.java:421)
at ch.qos.logback.core.AsyncAppenderBase$Worker.run(AsyncAppenderBase.java:298)
Locked ownable synchronizers:
- None
"Catalina-utility-1" #29 [2791009] prio=1 os_prio=0 cpu=1686.95ms elapsed=60540.56s tid=0x00007faa695fe4e0 nid=2791009 waiting on condition [0x00007faa6c1f2000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000e2ad3138> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(java.base@25.0.1/LockSupport.java:369)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@25.0.1/AbstractQueuedSynchronizer.java:520)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@25.0.1/ForkJoinPool.java:4364)
at java.util.concurrent.ForkJoinPool.managedBlock(java.base@25.0.1/ForkJoinPool.java:4310)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@25.0.1/AbstractQueuedSynchronizer.java:1752)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:1161)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:883)
at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@25.0.1/ThreadPoolExecutor.java:1016)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:57)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"Catalina-utility-2" #30 [2791010] prio=1 os_prio=0 cpu=1771.16ms elapsed=60540.56s tid=0x00007faa2801a300 nid=2791010 waiting on condition [0x00007faa503fe000]
java.lang.Thread.State: TIMED_WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000e2ad3138> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(java.base@25.0.1/LockSupport.java:271)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@25.0.1/AbstractQueuedSynchronizer.java:1803)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:1166)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:883)
at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@25.0.1/ThreadPoolExecutor.java:1016)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:57)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"container-0" #31 [2791011] prio=5 os_prio=0 cpu=100.66ms elapsed=60540.55s tid=0x00007faa696077d0 nid=2791011 waiting on condition [0x00007faa502fd000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleepNanos0(java.base@25.0.1/Native Method)
at java.lang.Thread.sleepNanos(java.base@25.0.1/Thread.java:509)
at java.lang.Thread.sleep(java.base@25.0.1/Thread.java:540)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:517)
at org.springframework.boot.tomcat.TomcatWebServer$1.run(TomcatWebServer.java:216)
Locked ownable synchronizers:
- None
"mysql-cj-abandoned-connection-cleanup" #32 [2791012] daemon prio=5 os_prio=0 cpu=1097.97ms elapsed=60540.34s tid=0x00007faa681a8630 nid=2791012 in Object.wait() [0x00007faa501fc000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait0(java.base@25.0.1/Native Method)
- waiting on <no object reference available>
at java.lang.Object.wait(java.base@25.0.1/Object.java:389)
at java.lang.ref.ReferenceQueue.remove0(java.base@25.0.1/ReferenceQueue.java:123)
at java.lang.ref.ReferenceQueue.remove(java.base@25.0.1/ReferenceQueue.java:201)
- locked <0x00000000e15b42c8> (a java.lang.ref.ReferenceQueue$Lock)
at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:84)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1090)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- <0x00000000e2ad3620> (a java.util.concurrent.ThreadPoolExecutor$Worker)
"HikariPool-1:housekeeper" #33 [2791016] daemon prio=5 os_prio=0 cpu=650.60ms elapsed=60539.66s tid=0x00007faa6972cee0 nid=2791016 waiting on condition [0x00007faa41ffe000]
java.lang.Thread.State: TIMED_WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000e2ad5e50> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(java.base@25.0.1/LockSupport.java:271)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@25.0.1/AbstractQueuedSynchronizer.java:1803)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:1166)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:883)
at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@25.0.1/ThreadPoolExecutor.java:1016)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"lettuce-timer-3-1" #35 [2791047] daemon prio=5 os_prio=0 cpu=8299.33ms elapsed=60538.38s tid=0x00007faa69969350 nid=2791047 waiting on condition [0x00007faa41dfc000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleepNanos0(java.base@25.0.1/Native Method)
at java.lang.Thread.sleepNanos(java.base@25.0.1/Thread.java:509)
at java.lang.Thread.sleep(java.base@25.0.1/Thread.java:540)
at io.netty.util.HashedWheelTimer$Worker.waitForNextTick(HashedWheelTimer.java:598)
at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:494)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"reactor-http-epoll-1" #36 [2791049] daemon prio=5 os_prio=0 cpu=783.24ms elapsed=60537.72s tid=0x00007faa69d67b50 nid=2791049 runnable [0x00007faa41cfb000]
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait0(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.EpollIoHandler.epollWait(EpollIoHandler.java:404)
at io.netty.channel.epoll.EpollIoHandler.run(EpollIoHandler.java:470)
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- <0x00000000e2a98888> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
"reactor-http-epoll-2" #37 [2791050] daemon prio=5 os_prio=0 cpu=1025.69ms elapsed=60537.72s tid=0x00007faa69d68a30 nid=2791050 runnable [0x00007faa41bfa000]
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait0(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.EpollIoHandler.epollWait(EpollIoHandler.java:404)
at io.netty.channel.epoll.EpollIoHandler.run(EpollIoHandler.java:470)
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- <0x00000000e22097f8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
"reactor-http-epoll-3" #38 [2791051] daemon prio=5 os_prio=0 cpu=581.59ms elapsed=60537.72s tid=0x00007faa69d69b30 nid=2791051 runnable [0x00007faa41af9000]
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait0(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.EpollIoHandler.epollWait(EpollIoHandler.java:404)
at io.netty.channel.epoll.EpollIoHandler.run(EpollIoHandler.java:470)
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- <0x00000000e150c230> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
"reactor-http-epoll-4" #39 [2791052] daemon prio=5 os_prio=0 cpu=650.34ms elapsed=60537.72s tid=0x00007faa69d9ea60 nid=2791052 runnable [0x00007faa419f8000]
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait0(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.EpollIoHandler.epollWait(EpollIoHandler.java:404)
at io.netty.channel.epoll.EpollIoHandler.run(EpollIoHandler.java:470)
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- <0x00000000e15013b8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
"parallel-1" #40 [2791053] daemon prio=5 os_prio=0 cpu=13.46ms elapsed=60536.83s tid=0x00007faa69ea0740 nid=2791053 waiting on condition [0x00007faa413fe000]
java.lang.Thread.State: TIMED_WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000e22298c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(java.base@25.0.1/LockSupport.java:271)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@25.0.1/AbstractQueuedSynchronizer.java:1803)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:1166)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:883)
at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@25.0.1/ThreadPoolExecutor.java:1016)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"VirtualThread-unblocker" #41 [2791083] daemon prio=5 os_prio=0 cpu=0.20ms elapsed=60535.74s tid=0x000055ce66f4a160 nid=2791083 runnable [0x00007faa412fd000]
java.lang.Thread.State: RUNNABLE
at java.lang.VirtualThread.takeVirtualThreadListToUnblock(java.base@25.0.1/Native Method)
at java.lang.VirtualThread.unblockVirtualThreads(java.base@25.0.1/VirtualThread.java:1507)
at java.lang.VirtualThread$$Lambda/0x0000000017bf5000.run(java.base@25.0.1/Unknown Source)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
at jdk.internal.misc.InnocuousThread.run(java.base@25.0.1/InnocuousThread.java:148)
Locked ownable synchronizers:
- None
"ForkJoinPool-1-worker-1" #43 [2791084] daemon prio=5 os_prio=0 cpu=4985.46ms elapsed=60535.73s tid=0x000055ce66f4b460 [0x00007faa411f9000]
Carrying virtual thread #10232
at jdk.internal.vm.Continuation.run(java.base@25.0.1/Continuation.java:251)
at java.lang.VirtualThread.runContinuation(java.base@25.0.1/VirtualThread.java:293)
at java.lang.VirtualThread$$Lambda/0x0000000017bf5c00.run(java.base@25.0.1/Unknown Source)
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(java.base@25.0.1/ForkJoinTask.java:1750)
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(java.base@25.0.1/ForkJoinTask.java:1742)
at java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(java.base@25.0.1/ForkJoinTask.java:1659)
at java.util.concurrent.ForkJoinTask.doExec(java.base@25.0.1/ForkJoinTask.java:511)
at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@25.0.1/ForkJoinPool.java:1450)
at java.util.concurrent.ForkJoinPool.runWorker(java.base@25.0.1/ForkJoinPool.java:2019)
at java.util.concurrent.ForkJoinWorkerThread.run(java.base@25.0.1/ForkJoinWorkerThread.java:187)
Mounted virtual thread #10232
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.resolveMediaType(AbstractMessageConverterMethodProcessor.java:561)
- waiting on the Class initialization monitor for org.springframework.http.MediaTypeFactory
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.safeExtension(AbstractMessageConverterMethodProcessor.java:550)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.addContentDispositionHeader(AbstractMessageConverterMethodProcessor.java:525)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:338)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:213)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:77)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:135)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:934)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:853)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:892)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:874)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:128)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at com.example.web.filter.NodeIdHeaderFilter.doFilterInternal(NodeIdHeaderFilter.java:25)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at com.example.web.filter.ActuatorSecurityFilter.doFilterInternal(ActuatorSecurityFilter.java:53)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at com.example.web.configuration.TraceId$TraceIdConfiguration.doFilterInternal(TraceId.java:48)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:143)
at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:355)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:272)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:110)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:199)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:77)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:113)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:83)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:685)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:1272)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1801)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.VirtualThread.run(java.base@25.0.1/VirtualThread.java:456)
at java.lang.VirtualThread$VThreadContinuation$1.run(java.base@25.0.1/VirtualThread.java:248)
at jdk.internal.vm.Continuation.enter0(java.base@25.0.1/Continuation.java:325)
at jdk.internal.vm.Continuation.enter(java.base@25.0.1/Continuation.java:316)
Locked ownable synchronizers:
- None
"pool-5-thread-1" #44 [2791086] prio=5 os_prio=0 cpu=678.70ms elapsed=60535.10s tid=0x00007faa68a11a30 nid=2791086 runnable [0x00007faa410fb000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPoll.wait(java.base@25.0.1/Native Method)
at sun.nio.ch.EPollSelectorImpl.doSelect(java.base@25.0.1/EPollSelectorImpl.java:117)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@25.0.1/SelectorImpl.java:130)
- locked <0x00000000e2229e48> (a sun.nio.ch.Util$2)
- locked <0x00000000e2229df8> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(java.base@25.0.1/SelectorImpl.java:142)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:340)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.execute(PoolingNHttpClientConnectionManager.java:189)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.doExecute(CloseableHttpAsyncClientBase.java:67)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.access$000(CloseableHttpAsyncClientBase.java:38)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase$1.run(CloseableHttpAsyncClientBase.java:57)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"Thread-7" #45 [2791087] prio=5 os_prio=0 cpu=357.93ms elapsed=60535.10s tid=0x00007faa68a122e0 nid=2791087 in Object.wait() [0x00007faa40ffa000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait0(java.base@25.0.1/Native Method)
- waiting on <no object reference available>
at java.lang.Object.wait(java.base@25.0.1/Object.java:389)
at com.alicloud.openservices.tablestore.core.http.AsyncServiceClient$IdleConnectionEvictor.run(AsyncServiceClient.java:118)
- locked <0x00000000e221d458> (a com.alicloud.openservices.tablestore.core.http.AsyncServiceClient$IdleConnectionEvictor)
Locked ownable synchronizers:
- None
"I/O dispatcher 1" #46 [2791088] prio=5 os_prio=0 cpu=916.73ms elapsed=60535.09s tid=0x00007faa2024f5f0 nid=2791088 runnable [0x00007faa40ef9000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPoll.wait(java.base@25.0.1/Native Method)
at sun.nio.ch.EPollSelectorImpl.doSelect(java.base@25.0.1/EPollSelectorImpl.java:117)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@25.0.1/SelectorImpl.java:130)
- locked <0x00000000e221d608> (a sun.nio.ch.Util$2)
- locked <0x00000000e221d5b8> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(java.base@25.0.1/SelectorImpl.java:142)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:256)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:105)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:584)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"I/O dispatcher 2" #47 [2791089] prio=5 os_prio=0 cpu=896.23ms elapsed=60535.09s tid=0x00007faa20178150 nid=2791089 runnable [0x00007faa40df8000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPoll.wait(java.base@25.0.1/Native Method)
at sun.nio.ch.EPollSelectorImpl.doSelect(java.base@25.0.1/EPollSelectorImpl.java:117)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@25.0.1/SelectorImpl.java:130)
- locked <0x00000000e221d890> (a sun.nio.ch.Util$2)
- locked <0x00000000e221d840> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(java.base@25.0.1/SelectorImpl.java:142)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:256)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:105)
at com.aliyun.ots.thirdparty.org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:584)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"idle-connection-reaper" #48 [2791091] daemon prio=5 os_prio=0 cpu=48.79ms elapsed=60534.06s tid=0x00007faa6a353470 nid=2791091 waiting on condition [0x00007faa40cf7000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleepNanos0(java.base@25.0.1/Native Method)
at java.lang.Thread.sleepNanos(java.base@25.0.1/Thread.java:509)
at java.lang.Thread.sleep(java.base@25.0.1/Thread.java:540)
at software.amazon.awssdk.http.apache5.internal.conn.IdleConnectionReaper$ReaperTask.run(IdleConnectionReaper.java:152)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1090)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- <0x00000000ecb00230> (a java.util.concurrent.ThreadPoolExecutor$Worker)
"nsq-sched-0" #49 [2791116] prio=5 os_prio=0 cpu=546.87ms elapsed=60532.55s tid=0x00007faa6a610300 nid=2791116 waiting on condition [0x00007faa41efd000]
java.lang.Thread.State: TIMED_WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000ecb002d0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(java.base@25.0.1/LockSupport.java:271)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@25.0.1/AbstractQueuedSynchronizer.java:1803)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:1166)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:883)
at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@25.0.1/ThreadPoolExecutor.java:1016)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"http-nio-10600-Poller" #51 [2791127] daemon prio=5 os_prio=0 cpu=1502.86ms elapsed=60530.47s tid=0x00007faa69b9b4e0 nid=2791127 runnable [0x00007faa40af5000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPoll.wait(java.base@25.0.1/Native Method)
at sun.nio.ch.EPollSelectorImpl.doSelect(java.base@25.0.1/EPollSelectorImpl.java:117)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@25.0.1/SelectorImpl.java:130)
- locked <0x00000000ecb00470> (a sun.nio.ch.Util$2)
- locked <0x00000000ecb00420> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(java.base@25.0.1/SelectorImpl.java:142)
at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:778)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"http-nio-10600-Acceptor" #52 [2791128] daemon prio=5 os_prio=0 cpu=29.59ms elapsed=60530.46s tid=0x00007faa69b9c610 nid=2791128 runnable [0x00007faa409f4000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.Net.accept(java.base@25.0.1/Native Method)
at sun.nio.ch.ServerSocketChannelImpl.implAccept(java.base@25.0.1/ServerSocketChannelImpl.java:424)
at sun.nio.ch.ServerSocketChannelImpl.accept(java.base@25.0.1/ServerSocketChannelImpl.java:391)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:532)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:71)
at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:127)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- <0x00000000eca49aa8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
"keep-alive" #53 [2791129] prio=5 os_prio=0 cpu=0.13ms elapsed=60530.44s tid=0x00007faa6810e6a0 nid=2791129 waiting on condition [0x00007faa408f3000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleepNanos0(java.base@25.0.1/Native Method)
at java.lang.Thread.sleepNanos(java.base@25.0.1/Thread.java:509)
at java.lang.Thread.sleep(java.base@25.0.1/Thread.java:540)
at org.springframework.boot.SpringApplication$KeepAlive.lambda$startKeepAliveThread$0(SpringApplication.java:1717)
at org.springframework.boot.SpringApplication$KeepAlive$$Lambda/0x00000000180c2400.run(Unknown Source)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"ForkJoinPool-1-delayScheduler" #55 [2791130] daemon prio=5 os_prio=0 cpu=295.38ms elapsed=60530.43s tid=0x00007faa24009930 nid=2791130 waiting on condition [0x00007faa407f2000]
java.lang.Thread.State: TIMED_WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
at java.util.concurrent.DelayScheduler.loop(java.base@25.0.1/DelayScheduler.java:253)
at java.util.concurrent.DelayScheduler.run(java.base@25.0.1/DelayScheduler.java:221)
Locked ownable synchronizers:
- None
"parallel-2" #56 [2791131] daemon prio=5 os_prio=0 cpu=11.45ms elapsed=60530.43s tid=0x00007faa68112f10 nid=2791131 waiting on condition [0x00007faa406f1000]
java.lang.Thread.State: TIMED_WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000e221e248> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(java.base@25.0.1/LockSupport.java:271)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@25.0.1/AbstractQueuedSynchronizer.java:1803)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:1166)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:883)
at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@25.0.1/ThreadPoolExecutor.java:1016)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"MasterPoller" #58 [2791132] daemon prio=5 os_prio=0 cpu=186.54ms elapsed=60530.20s tid=0x00007faa24090f00 nid=2791132 runnable [0x00007faa405f0000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPoll.wait(java.base@25.0.1/Native Method)
at sun.nio.ch.EPollPoller.poll(java.base@25.0.1/EPollPoller.java:74)
at sun.nio.ch.Poller.pollerLoop(java.base@25.0.1/Poller.java:248)
at sun.nio.ch.Poller$Pollers$$Lambda/0x0000000017deb800.run(java.base@25.0.1/Unknown Source)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
at jdk.internal.misc.InnocuousThread.run(java.base@25.0.1/InnocuousThread.java:148)
Locked ownable synchronizers:
- None
"ForkJoinPool-1-worker-2" #60 [2791133] daemon prio=5 os_prio=0 cpu=4452.14ms elapsed=60530.20s tid=0x00007faa24092530 [0x00007faa404eb000]
Carrying virtual thread #10230
at jdk.internal.vm.Continuation.run(java.base@25.0.1/Continuation.java:251)
at java.lang.VirtualThread.runContinuation(java.base@25.0.1/VirtualThread.java:293)
at java.lang.VirtualThread$$Lambda/0x0000000017bf5c00.run(java.base@25.0.1/Unknown Source)
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(java.base@25.0.1/ForkJoinTask.java:1750)
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(java.base@25.0.1/ForkJoinTask.java:1742)
at java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(java.base@25.0.1/ForkJoinTask.java:1659)
at java.util.concurrent.ForkJoinTask.doExec(java.base@25.0.1/ForkJoinTask.java:511)
at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@25.0.1/ForkJoinPool.java:1450)
at java.util.concurrent.ForkJoinPool.runWorker(java.base@25.0.1/ForkJoinPool.java:2019)
at java.util.concurrent.ForkJoinWorkerThread.run(java.base@25.0.1/ForkJoinWorkerThread.java:187)
Mounted virtual thread #10230
at org.springframework.boot.loader.jar.NestedJarFile.hasEntry(NestedJarFile.java:251)
- waiting to lock <0x00000000e01b8778> (a org.springframework.boot.loader.net.protocol.jar.UrlNestedJarFile)
at org.springframework.boot.loader.net.protocol.jar.JarUrlConnection.hasEntry(JarUrlConnection.java:356)
at org.springframework.boot.loader.net.protocol.jar.JarUrlConnection.open(JarUrlConnection.java:347)
at org.springframework.boot.loader.net.protocol.jar.Handler.openConnection(Handler.java:46)
at java.net.URL.openConnection(java.base@25.0.1/URL.java:1209)
at jdk.internal.loader.URLClassPath$Loader.findResource(java.base@25.0.1/URLClassPath.java:524)
at jdk.internal.loader.URLClassPath.findResource(java.base@25.0.1/URLClassPath.java:268)
at java.net.URLClassLoader.findResource(java.base@25.0.1/URLClassLoader.java:550)
at org.springframework.boot.loader.net.protocol.jar.JarUrlClassLoader.findResource(JarUrlClassLoader.java:73)
at java.lang.ClassLoader.getResource(java.base@25.0.1/ClassLoader.java:1349)
at java.net.URLClassLoader.getResourceAsStream(java.base@25.0.1/URLClassLoader.java:244)
at java.lang.Class.getResourceAsStream(java.base@25.0.1/Class.java:2585)
at org.springframework.http.MediaTypeFactory.parseMimeTypes(MediaTypeFactory.java:69)
at org.springframework.http.MediaTypeFactory.<clinit>(MediaTypeFactory.java:49)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.resolveMediaType(AbstractMessageConverterMethodProcessor.java:561)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.safeExtension(AbstractMessageConverterMethodProcessor.java:550)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.addContentDispositionHeader(AbstractMessageConverterMethodProcessor.java:525)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:338)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:213)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:77)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:135)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:934)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:853)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:892)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:874)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:128)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at com.example.web.filter.NodeIdHeaderFilter.doFilterInternal(NodeIdHeaderFilter.java:25)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at com.example.web.filter.ActuatorSecurityFilter.doFilterInternal(ActuatorSecurityFilter.java:53)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at com.example.web.configuration.TraceId$TraceIdConfiguration.doFilterInternal(TraceId.java:48)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:143)
at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:355)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:272)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:110)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:199)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:77)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:113)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:83)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:685)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:1272)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1801)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.VirtualThread.run(java.base@25.0.1/VirtualThread.java:456)
at java.lang.VirtualThread$VThreadContinuation$1.run(java.base@25.0.1/VirtualThread.java:248)
at jdk.internal.vm.Continuation.enter0(java.base@25.0.1/Continuation.java:325)
at jdk.internal.vm.Continuation.enter(java.base@25.0.1/Continuation.java:316)
Locked ownable synchronizers:
- None
"lettuce-epollEventLoop-4-1" #64 [2791157] daemon prio=5 os_prio=0 cpu=1612.75ms elapsed=60529.58s tid=0x00007faa2420d0a0 nid=2791157 runnable [0x00007faa403ee000]
java.lang.Thread.State: RUNNABLE
at io.netty.channel.epoll.Native.epollWait0(Native Method)
at io.netty.channel.epoll.Native.epollWait(Native.java:193)
at io.netty.channel.epoll.EpollIoHandler.epollWait(EpollIoHandler.java:404)
at io.netty.channel.epoll.EpollIoHandler.run(EpollIoHandler.java:470)
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- <0x00000000ecb0ccb8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
"registrationTask1" #67 [2791164] prio=5 os_prio=0 cpu=6997.57ms elapsed=60529.02s tid=0x00007faa6810c650 nid=2791164 waiting on condition [0x00007faa402ed000]
java.lang.Thread.State: TIMED_WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000ecaede30> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(java.base@25.0.1/LockSupport.java:271)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@25.0.1/AbstractQueuedSynchronizer.java:1803)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:1166)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:883)
at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@25.0.1/ThreadPoolExecutor.java:1016)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"DestroyJavaVM" #69 [2790874] prio=5 os_prio=0 cpu=11173.12ms elapsed=60529.02s tid=0x00007faa6802aa00 nid=2790874 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"nsq-sched-1" #76 [2791179] prio=5 os_prio=0 cpu=566.01ms elapsed=60523.69s tid=0x00007faa3c00b220 nid=2791179 waiting on condition [0x00007faa401ec000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@25.0.1/Native Method)
- parking to wait for <0x00000000ecb002d0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(java.base@25.0.1/LockSupport.java:369)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@25.0.1/AbstractQueuedSynchronizer.java:520)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@25.0.1/ForkJoinPool.java:4364)
at java.util.concurrent.ForkJoinPool.managedBlock(java.base@25.0.1/ForkJoinPool.java:4310)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@25.0.1/AbstractQueuedSynchronizer.java:1752)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:1161)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@25.0.1/ScheduledThreadPoolExecutor.java:883)
at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@25.0.1/ThreadPoolExecutor.java:1016)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@25.0.1/ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@25.0.1/ThreadPoolExecutor.java:614)
at java.lang.Thread.runWith(java.base@25.0.1/Thread.java:1487)
at java.lang.Thread.run(java.base@25.0.1/Thread.java:1474)
Locked ownable synchronizers:
- None
"Attach Listener" #10329 [2818441] daemon prio=9 os_prio=0 cpu=0.47ms elapsed=310.03s tid=0x00007faa2408ac80 nid=2818441 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"GC Thread#1" os_prio=0 cpu=556.94ms elapsed=60549.81s tid=0x00007faa280062b0 nid=2790894 runnable
"VM Thread" os_prio=0 cpu=131.74ms elapsed=60550.49s tid=0x00007faa680e8ac0 nid=2790882 runnable
"VM Periodic Task Thread" os_prio=0 cpu=167.17ms elapsed=60550.50s tid=0x00007faa680d8680 nid=2790881 waiting on condition
"G1 Service" os_prio=0 cpu=936.85ms elapsed=60550.51s tid=0x00007faa680c3540 nid=2790879 runnable
"G1 Refine#0" os_prio=0 cpu=12738.18ms elapsed=60550.51s tid=0x00007faa680c2350 nid=2790878 runnable
"G1 Conc#0" os_prio=0 cpu=369.99ms elapsed=60550.51s tid=0x00007faa68064830 nid=2790877 runnable
"G1 Main Marker" os_prio=0 cpu=1.77ms elapsed=60550.51s tid=0x00007faa68063660 nid=2790876 runnable
"GC Thread#0" os_prio=0 cpu=551.38ms elapsed=60550.51s tid=0x00007faa6805be10 nid=2790875 runnable
JNI global refs: 53, weak refs: 16
Environment
Spring Boot version:
4.1.0
Java version:
openjdk 25.0.1 2025-10-21 LTS
OpenJDK Runtime Environment Temurin-25.0.1+8 (build 25.0.1+8-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.1+8 (build 25.0.1+8-LTS, mixed mode, sharing)
Operating system:
AlmaLinux 10.1
Linux iZbp13zobg49l6ha5nowh0Z 6.12.0-124.27.1.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Jan 13 07:47:29 EST 2026 x86_64 GNU/Linux
Describe the bug
When using Spring Boot with virtual threads enabled, a request that triggers
MediaTypeFactoryclass initialization can cause permanent thread blocking. The issue occurs because the static initializer ofMediaTypeFactorycallsparseMimeTypes(), which reads a resource from the application's nested jar viaNestedJarFile.hasEntry(). This method is synchronized and may block indefinitely if the lock on the underlyingUrlNestedJarFileinstance cannot be acquired or released properly under certain conditions.After the initializing thread hangs, all requests will also hang waiting for the class initialization monitor, effectively freezing the application.
Steps to Reproduce
Expected behavior
The class initialization should complete quickly without hanging. All requests should be served normally.
Actual behavior
Two virtual threads become blocked:
MediaTypeFactory.<clinit>→parseMimeTypes()→ ... →NestedJarFile.hasEntry()trying to acquire a lock on aUrlNestedJarFileinstance.MediaTypeFactory.This leads to a total service stall after the first few requests.
Sample Thread Dump
Environment
Spring Boot version:
4.1.0
Java version:
openjdk 25.0.1 2025-10-21 LTS
OpenJDK Runtime Environment Temurin-25.0.1+8 (build 25.0.1+8-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.1+8 (build 25.0.1+8-LTS, mixed mode, sharing)
Operating system:
AlmaLinux 10.1
Linux iZbp13zobg49l6ha5nowh0Z 6.12.0-124.27.1.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Jan 13 07:47:29 EST 2026 x86_64 GNU/Linux