C3p0 APPARENT DEADLOCK异常

我在Tomcat日志中不断收到此异常:

com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run

WARNING: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@76b28200 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!

com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run

WARNING: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@76b28200 -- APPARENT DEADLOCK!!! Complete Status:

Managed Threads: 3

Active Threads: 3

Active Tasks:

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1201fd18 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@408f3be4 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@7ba516d8 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)

Pending Tasks:

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@137efe53

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@766b0524

Pool thread stack traces:

Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main]

java.lang.Thread.sleep(Native Method)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)

com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main]

java.lang.Thread.sleep(Native Method)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)

com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main]

java.lang.Thread.sleep(Native Method)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)

com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

我正在将Hibernate 3.6.2和C3P0 0.9.1.2与MySQL一起使用。在搜索Google几个小时之后,此APPARENT

DEADLOCK异常似乎通常与准备好的语句缓存相关联。这是我的hibernate.cfg.xml中的C3P0配置:

<propertyname="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

<property name="hibernate.c3p0.acquire_increment">5</property>

<property name="hibernate.c3p0.min_size">5</property>

<property name="hibernate.c3p0.max_size">60</property>

<property name="hibernate.c3p0.idle_test_period">120</property>

<property name="hibernate.c3p0.timeout">180</property>

<property name="hibernate.c3p0.max_statements">0</property>

我不做任何缓存语句。任何关于这里出什么问题的暗示将不胜感激。

回答:

脱钩的任务是连接获取任务。也就是说,c3p0尝试从数据库中获取新的连接,而这些连接获取尝试花费了很长时间。

我要做的第一件事是升级到0.9.2.1,这在获取尝试有时会失败的情况下,可以大大改善执行一轮Connection获取的方式。

如果那不能解决您的问题,那么您需要弄清楚为什么c3p0尝试获取连接的尝试长时间挂起了:成功与失败都不会出现异常。

以上是 C3p0 APPARENT DEADLOCK异常 的全部内容, 来源链接: utcz.com/qa/419350.html

回到顶部