Druid 连接池异常,出现死锁

子木007 发布于 2012/08/10 12:51
阅读 4K+
收藏 3

@wenshao 你好,想跟你请教个问题:

项目之前用的是 dbcp 后来频繁出现死锁, 于是改用 Druid , 近一个月以来一直表现良好,但今天又出现系统无反应,日志如下:

"http-8080-101" daemon prio=10 tid=0x7003fc00 nid=0x1dec waiting on condition [0x6c00c000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x81b1ee58> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
	at com.alibaba.druid.pool.DruidDataSource.takeLast(DruidDataSource.java:777)
	at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:533)
	at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:436)
	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:406)
	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:396)
	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:70)

求指导。 配置如下:

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="testOnBorrow" value="${jdbc.testOnBorrow}"/>
        <property name="validationQuery" value="${jdbc.validationQuery}"/>
        <property name="maxActive" value="20" />
    </bean>

加载中
0
wenshao
wenshao
应该是程序自身的问题导致连接泄漏了,加入扣扣群92748305吧,大家告诉你如何诊断解决。
0
wenshao
wenshao
配置removeAbandanded=true之后,通过监控界面看activeConnectionTrace,能够看到哪里连接泄漏了
0
子木007
子木007
谢谢, 已经根据你的建议做了配置。  开始监控 + 调试   
0
先知
后来结果咋样了?是程序死锁吗?
0
子木007
子木007

引用来自“先知”的答案

后来结果咋样了?是程序死锁吗?

不是程序死锁。 数据库装好后没有优化,程序在某些耗时操作的地方引起的,后来程序加了监控,数据库重装,稍作优化后,近期没有出现。

刚开始观察了一段儿时间Druid(内置的监控),逻辑打开和关闭都是匹配的,物理连接也基本没有达到 maxActive ,都是正常的。 

返回顶部
顶部