Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用apache commons打开连接时线程被阻止_Java_Apache Commons_Blocked Threads - Fatal编程技术网

Java 使用apache commons打开连接时线程被阻止

Java 使用apache commons打开连接时线程被阻止,java,apache-commons,blocked-threads,Java,Apache Commons,Blocked Threads,在我的应用程序中,许多线程都试图从oracle获得连接,但我发现一次只能有一个线程能够获得连接。在该线程获得连接之前,其他线程将被阻塞,这将导致应用程序运行缓慢。我需要帮助确定为什么其他线程被阻塞。我的连接是否比池中的可用连接要少 固定锁的线 org.apache.commons.dbcp2.managed.LocalXAConnectionFactory.createConnection(LocalXAConnectionFactory.java:68) at org.apache.c

在我的应用程序中,许多线程都试图从oracle获得连接,但我发现一次只能有一个线程能够获得连接。在该线程获得连接之前,其他线程将被阻塞,这将导致应用程序运行缓慢。我需要帮助确定为什么其他线程被阻塞。我的连接是否比池中的可用连接要少

固定锁的线

org.apache.commons.dbcp2.managed.LocalXAConnectionFactory.createConnection(LocalXAConnectionFactory.java:68)
    at org.apache.commons.dbcp2.managed.PoolableManagedConnectionFactory.makeObject(PoolableManagedConnectionFactory.java:64)

- locked <0x0000000641e88660> (a org.apache.commons.dbcp2.managed.PoolableManagedConnectionFactory)
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
    at org.apache.commons.dbcp2.managed.ManagedConnection.updateTransactionStatus(ManagedConnection.java:125)
    at org.apache.commons.dbcp2.managed.ManagedConnection.<init>(ManagedConnection.java:59)
    at org.apache.commons.dbcp2.managed.ManagedDataSource.getConnection(ManagedDataSource.java:81)
    at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
    at com.manh.jdbc.ScopeDataSource.getConnection(ScopeDataSource.java:79)


Thread waiting for lock on PoolableManagedConnectionFactory

"pool-38-thread-5389" #267084 prio=5 os_prio=0 tid=0x00002b6b66541800 nid=0x18dcf waiting for monitor entry [0x00002b6bfd047000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at org.apache.commons.dbcp2.managed.PoolableManagedConnectionFactory.makeObject(PoolableManagedConnectionFactory.java:64)
    - waiting to lock <0x0000000641e88660> (a org.apache.commons.dbcp2.managed.PoolableManagedConnectionFactory)
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
    at org.apache.commons.dbcp2.managed.ManagedConnection.updateTransactionStatus(ManagedConnection.java:125)
    at org.apache.commons.dbcp2.managed.ManagedConnection.<init>(ManagedConnection.java:59)
org.apache.commons.dbcp2.managed.LocalXAConnectionFactory.createConnection(LocalXAConnectionFactory.java:68)
位于org.apache.commons.dbcp2.managed.PoolableManagedConnectionFactory.makeObject(PoolableManagedConnectionFactory.java:64)
-锁定(org.apache.commons.dbcp2.managed.PoolableManagedConnectionFactory)
在org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)上
位于org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
位于org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
位于org.apache.commons.dbcp2.managed.ManagedConnection.updateTransactionStatus(ManagedConnection.java:125)
位于org.apache.commons.dbcp2.managed.ManagedConnection。(ManagedConnection.java:59)
位于org.apache.commons.dbcp2.managed.ManagedDataSource.getConnection(ManagedDataSource.java:81)
位于org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
位于com.manh.jdbc.ScopeDataSource.getConnection(ScopeDataSource.java:79)
线程等待PoolableManagedConnectionFactory上的锁
“pool-38-thread-5389”#267084优先级=5 os_优先级=0 tid=0x00002b6b66541800 nid=0x18dcf等待监视器条目[0x00002b6bfd047000]
java.lang.Thread.State:阻塞(在对象监视器上)
位于org.apache.commons.dbcp2.managed.PoolableManagedConnectionFactory.makeObject(PoolableManagedConnectionFactory.java:64)
-等待锁定(org.apache.commons.dbcp2.managed.PoolableManagedConnectionFactory)
在org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)上
位于org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
位于org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
位于org.apache.commons.dbcp2.managed.ManagedConnection.updateTransactionStatus(ManagedConnection.java:125)
位于org.apache.commons.dbcp2.managed.ManagedConnection。(ManagedConnection.java:59)

您是否忘记提交或关闭连接?我不确定是否存在连接泄漏,因为我的应用程序非常庞大,通过查看堆栈跟踪,您是否认为由于应用程序中的连接泄漏,连接池已耗尽?当然。打开连接没有被阻止,它在池中的某个监视器上被阻止,这表明它正在等待连接被释放。ApacheDBCP中有一些泄漏检测工具。使用它们。您可以添加连接池的配置、使用该池的代码以及有多少线程同时使用该池吗。