jdk1.6.0_29的bug导致c3p0获取sqlserver连接时被hang住甚至deadlock问题的分析
Posted crazy_itman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk1.6.0_29的bug导致c3p0获取sqlserver连接时被hang住甚至deadlock问题的分析相关的知识,希望对你有一定的参考价值。
最近在工作中遇到这样一个问题:一个java应用,作用是从sqlserver数据源同步数据到mysql中,在本地跑很正常,tomcat可以正常启动,可以正常同步数据,一旦放到测试环境上就有问题:tomcat在启动时一直卡住不动,而且也不报错,这是很典型的deadlock问题。我随后修改了一下c3p0连接池的相关参数,果然再启动时就报出一堆错误,下面是部分报错片段:com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@bbd1b —APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
报出来错就好办,下面就来分析为什么会出现死锁。为什么本地运行的好好的程序换个环境就出问题呢?经过层层的排查。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。此处省略50000字,将tomcat使用的jdk换为1.7版本的,问题立马解决!
刚开始我一直怀疑是C3P0的bug,试了其他数据库连接池甚至使用原生的jdbc方式连接仍然无法获取连接,冤枉了C3P0!
其实这是jdk1.6.0_29本身的bug引起的,相关证据如下:
以上是关于jdk1.6.0_29的bug导致c3p0获取sqlserver连接时被hang住甚至deadlock问题的分析的主要内容,如果未能解决你的问题,请参考以下文章
jdk1.6.0_02\jre\lib\ext和jre1.6.0_02\lib\ext有啥区别?
使用 Apache Http Client 4.5.3 从 jdk1.6.0_45 到 API Gateway 的简单 POST 请求