首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Tomcat上部署的DBCP中存在死锁问题

在Tomcat上部署的DBCP中存在死锁问题
EN

Stack Overflow用户
提问于 2011-04-19 17:49:08
回答 2查看 14K关注 0票数 17

我在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)

欢迎提出任何建议!

EN

回答 2

Stack Overflow用户

发布于 2011-04-19 18:42:19

您是否确保commons-pool版本与dbcp版本匹配?

此外,我没有在堆栈跟踪中看到死锁,它看起来只是看起来你有线程在等待连接释放。你有多少个线程同时尝试连接?您为池等配置了多少个连接?

在调试这类情况时,查看获得连接的线程正在做什么也很有用。

票数 1
EN

Stack Overflow用户

发布于 2012-10-16 04:27:22

随着应用程序负载的增加,对并发连接的需求也在不断增加。当你的线程挂在borrowConnection()上时-意味着你没有足够的ActiveConnections可用。

在数据源属性中增加maxActive,并将WHEN_EXHAUSTED_BLOCK设置为类似于600ms - 1000ms的时间。只有在经过600ms -1000ms之后,您才会得到No element available异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5714511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档