我的tomcat启动时出现C3P0 Apparent死锁

当我通过tomcat或resin启动我的项目时,我的项目将抛出错误:APPARENT DEADLOCK

我认为由c3p0引起的错误无法连接我的数据库,我更改了xml并用数据库的ip替换了域名,然后启动了项目!

在我的c3p0工作之前,我使用了一个侦听器,并且可以获取正确的域名和ip,但找不到APPARENT DEADLOCK的原因。

012-10-22 16:53:04 24344    WARN  [Timer-0] com.mchange.v2.async.ThreadPoolAsynchronousRunner:624 - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1e79aa -- APPARENT DEADLOCK!!! Complete Status: 

Managed Threads: 3

Active Threads: 3

Active Tasks:

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

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

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

Pending Tasks:

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@cb560b

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@17e107c

Pool thread stack traces:

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

java.net.PlainSocketImpl.socketConnect(Native Method)

java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)

回答:

听起来好像已经找到了原因:您遇到了DNS问题,因此尝试通过名称挂起查找数据库,而通过IP连接到数据库则很好。您看到的c3p0消息表明尝试从数据库获取连接正在挂起(即,成功或失败都不会引发Exception)。最终,那些挂起的tasak耗尽了c3p0的线程池,您会看到APPARENT

DEADLOCK警告。

当您看到与语句相关的任务导致死锁时,user1516873建议的设置statementCacheNumDeferredCloseThreads很有用,但不太可能对您有所帮助。您正在等待池从数据库获取连接的尝试。

您应该做的主要事情是调试Web应用服务器上的DNS问题。尝试使用nslookup或dig之类的工具,查看是否可以按名称查找数据库服务器,结果是否很快出现或是否挂在查找中。根据您的描述,您很可能会在那里发现问题。

以上是 我的tomcat启动时出现C3P0 Apparent死锁 的全部内容, 来源链接: utcz.com/qa/428293.html

回到顶部