Tomcat上部署的DBCP中的死锁问题

我在Spring配置中使用DBCP数据源(具有默认配置)来管理与数据库的连接,并且随着客户端数量的增加,我陷入了死锁状态。

我发现我正在使用的DBCP 1.2.1中存在一个死锁问题,应该在1.4中解决。所以我升级到1.4,但是问题仍然存在。

在线程转储中,有许多线程被阻塞,并在其顶部放置了以下堆栈跟踪:

   java.lang.Thread.State: WAITING on org.apache.commons.pool.impl.GenericObjectPool$Latch@b6b09e

at java.lang.Object.wait(Native Method)

at java.lang.Object.wait(Object.java:485)

at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1104)

at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)

at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)

at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:200)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350)

at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:261)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:160)

at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:631)

欢迎任何建议!

回答:

几年前,我切换到了c3p0。你可以试试看。我相信您不必进行太多更改,这只是配置游戏。

与JDBC相关的线程,连接池选项:DBCP vsC3P0。好吧,实际上我使它与之相关。

Tomcat 7有一个不错的连接池,即TomcatJDBC连接池。

以上是 Tomcat上部署的DBCP中的死锁问题 的全部内容, 来源链接: utcz.com/qa/414579.html

回到顶部