-
Bug
-
Resolution: Unresolved
-
P4
-
None
-
21, 25
-
generic
-
generic
ADDITIONAL SYSTEM INFORMATION :
openjdk 21.0.8 2025-07-15 LTS
OpenJDK Runtime Environment Temurin-21.0.8+9 (build 21.0.8+9-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.8+9 (build 21.0.8+9-LTS, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
Asynchronous execution of multiple LDAP queries causes the application to freeze at some point. The AD server and the application are on the same subnet, but I suppose that sometimes the AD server may return a request timeout, which means that jndi cannot release the lock, which, in the case of long application operation, leads to the entire thread pool being blocked at some point. It causes the application to freeze completely(!), no exceptions, no information about what happened. The service is still running but does not respond to any interactions and does not log anything to the console. I am using:
com.sun.jndi.ldap.connect.timeout: 5000
com.sun.jndi.ldap.read.timeout: 5000
com.sun.jndi.ldap.connect.pool: true
"Thread-42" #15207300 [111913] daemon prio=5 os_prio=0 cpu=3034.94ms elapsed=10343.09s tid=0x0000737f4fa0f670 nid=111913 waiting on condition [0x0000737f489ae000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.8/Native Method)
- parking to wait for <0x0000000403d8e190> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.8/LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.8/ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.8/ReentrantLock.java:322)
at com.sun.jndi.ldap.pool.Connections.removePooledConnection(java.naming@21.0.8/Connections.java:251)
at com.sun.jndi.ldap.LdapClient.processConnectionClosure(java.naming@21.0.8/LdapClient.java:514)
at com.sun.jndi.ldap.Connection.cleanup(java.naming@21.0.8/Connection.java:684)
at com.sun.jndi.ldap.Connection.run(java.naming@21.0.8/Connection.java:1041)
at java.lang.Thread.runWith(java.base@21.0.8/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.8/Thread.java:1583)
"Thread-43" #15221556 [112041] daemon prio=5 os_prio=0 cpu=1684.55ms elapsed=9993.95s tid=0x0000737f47e4e820 nid=112041 waiting on condition [0x0000737f4727d000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.8/Native Method)
- parking to wait for <0x0000000403d8e190> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.8/LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.8/ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.8/ReentrantLock.java:322)
at com.sun.jndi.ldap.pool.Connections.removePooledConnection(java.naming@21.0.8/Connections.java:251)
at com.sun.jndi.ldap.LdapClient.processConnectionClosure(java.naming@21.0.8/LdapClient.java:514)
at com.sun.jndi.ldap.Connection.cleanup(java.naming@21.0.8/Connection.java:684)
at com.sun.jndi.ldap.Connection.run(java.naming@21.0.8/Connection.java:1041)
at java.lang.Thread.runWith(java.base@21.0.8/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.8/Thread.java:1583)
"Thread-46" #15411631 [113546] daemon prio=5 os_prio=0 cpu=978.75ms elapsed=5603.09s tid=0x0000737f4f5938a0 nid=113546 waiting on condition [0x0000737f47580000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.8/Native Method)
- parking to wait for <0x0000000403d8e190> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.8/LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.8/ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.8/ReentrantLock.java:322)
at com.sun.jndi.ldap.pool.Connections.removePooledConnection(java.naming@21.0.8/Connections.java:251)
at com.sun.jndi.ldap.LdapClient.processConnectionClosure(java.naming@21.0.8/LdapClient.java:514)
at com.sun.jndi.ldap.Connection.cleanup(java.naming@21.0.8/Connection.java:684)
at com.sun.jndi.ldap.Connection.run(java.naming@21.0.8/Connection.java:1041)
at java.lang.Thread.runWith(java.base@21.0.8/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.8/Thread.java:1583)
"Thread-47" #15452491 [113811] daemon prio=5 os_prio=0 cpu=2.23ms elapsed=4823.06s tid=0x0000737f4f5e4f90 nid=113811 waiting on condition [0x0000737f4737e000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.8/Native Method)
- parking to wait for <0x0000000403d8e190> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.8/LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.8/ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.8/ReentrantLock.java:322)
at com.sun.jndi.ldap.pool.Connections.removePooledConnection(java.naming@21.0.8/Connections.java:251)
at com.sun.jndi.ldap.LdapClient.processConnectionClosure(java.naming@21.0.8/LdapClient.java:514)
at com.sun.jndi.ldap.Connection.cleanup(java.naming@21.0.8/Connection.java:684)
at com.sun.jndi.ldap.Connection.run(java.naming@21.0.8/Connection.java:1041)
at java.lang.Thread.runWith(java.base@21.0.8/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.8/Thread.java:1583)
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I would expect a timeout exception to be thrown, not the entire application to freeze.
openjdk 21.0.8 2025-07-15 LTS
OpenJDK Runtime Environment Temurin-21.0.8+9 (build 21.0.8+9-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.8+9 (build 21.0.8+9-LTS, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
Asynchronous execution of multiple LDAP queries causes the application to freeze at some point. The AD server and the application are on the same subnet, but I suppose that sometimes the AD server may return a request timeout, which means that jndi cannot release the lock, which, in the case of long application operation, leads to the entire thread pool being blocked at some point. It causes the application to freeze completely(!), no exceptions, no information about what happened. The service is still running but does not respond to any interactions and does not log anything to the console. I am using:
com.sun.jndi.ldap.connect.timeout: 5000
com.sun.jndi.ldap.read.timeout: 5000
com.sun.jndi.ldap.connect.pool: true
"Thread-42" #15207300 [111913] daemon prio=5 os_prio=0 cpu=3034.94ms elapsed=10343.09s tid=0x0000737f4fa0f670 nid=111913 waiting on condition [0x0000737f489ae000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.8/Native Method)
- parking to wait for <0x0000000403d8e190> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.8/LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.8/ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.8/ReentrantLock.java:322)
at com.sun.jndi.ldap.pool.Connections.removePooledConnection(java.naming@21.0.8/Connections.java:251)
at com.sun.jndi.ldap.LdapClient.processConnectionClosure(java.naming@21.0.8/LdapClient.java:514)
at com.sun.jndi.ldap.Connection.cleanup(java.naming@21.0.8/Connection.java:684)
at com.sun.jndi.ldap.Connection.run(java.naming@21.0.8/Connection.java:1041)
at java.lang.Thread.runWith(java.base@21.0.8/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.8/Thread.java:1583)
"Thread-43" #15221556 [112041] daemon prio=5 os_prio=0 cpu=1684.55ms elapsed=9993.95s tid=0x0000737f47e4e820 nid=112041 waiting on condition [0x0000737f4727d000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.8/Native Method)
- parking to wait for <0x0000000403d8e190> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.8/LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.8/ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.8/ReentrantLock.java:322)
at com.sun.jndi.ldap.pool.Connections.removePooledConnection(java.naming@21.0.8/Connections.java:251)
at com.sun.jndi.ldap.LdapClient.processConnectionClosure(java.naming@21.0.8/LdapClient.java:514)
at com.sun.jndi.ldap.Connection.cleanup(java.naming@21.0.8/Connection.java:684)
at com.sun.jndi.ldap.Connection.run(java.naming@21.0.8/Connection.java:1041)
at java.lang.Thread.runWith(java.base@21.0.8/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.8/Thread.java:1583)
"Thread-46" #15411631 [113546] daemon prio=5 os_prio=0 cpu=978.75ms elapsed=5603.09s tid=0x0000737f4f5938a0 nid=113546 waiting on condition [0x0000737f47580000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.8/Native Method)
- parking to wait for <0x0000000403d8e190> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.8/LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.8/ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.8/ReentrantLock.java:322)
at com.sun.jndi.ldap.pool.Connections.removePooledConnection(java.naming@21.0.8/Connections.java:251)
at com.sun.jndi.ldap.LdapClient.processConnectionClosure(java.naming@21.0.8/LdapClient.java:514)
at com.sun.jndi.ldap.Connection.cleanup(java.naming@21.0.8/Connection.java:684)
at com.sun.jndi.ldap.Connection.run(java.naming@21.0.8/Connection.java:1041)
at java.lang.Thread.runWith(java.base@21.0.8/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.8/Thread.java:1583)
"Thread-47" #15452491 [113811] daemon prio=5 os_prio=0 cpu=2.23ms elapsed=4823.06s tid=0x0000737f4f5e4f90 nid=113811 waiting on condition [0x0000737f4737e000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.8/Native Method)
- parking to wait for <0x0000000403d8e190> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.8/LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.8/AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.8/ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.8/ReentrantLock.java:322)
at com.sun.jndi.ldap.pool.Connections.removePooledConnection(java.naming@21.0.8/Connections.java:251)
at com.sun.jndi.ldap.LdapClient.processConnectionClosure(java.naming@21.0.8/LdapClient.java:514)
at com.sun.jndi.ldap.Connection.cleanup(java.naming@21.0.8/Connection.java:684)
at com.sun.jndi.ldap.Connection.run(java.naming@21.0.8/Connection.java:1041)
at java.lang.Thread.runWith(java.base@21.0.8/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.8/Thread.java:1583)
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I would expect a timeout exception to be thrown, not the entire application to freeze.
- relates to
-
JDK-8277795 LDAP connection timeout not honoured under contention
-
- Closed
-