环境:
tomcat6配置2个虚拟主机项目web1和web2分别绑定2个域名.
2个项目基本上是90%相同的,主要修改了皮肤,所以用的连接池都是c3po.
2个项目链接的数据库都是本地同一mysql下2个不同的库db1和db2这个web项目在其他机器上还有一份部署,模式是tomcat+web+db,项目只有一个,数据库独享,这个项目运行30天无故障.
现在问题是:
上面把这个项目部署成2个虚拟主机时,撑不过24小时,就会报错:
-----com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@785308d1 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!网上查了很多问题,好像都是c3p0造成的,但是单独的项目又好好的,估计可能是共享部署的原因,望高手指点!

解决方案 »

  1.   

    换个tomcat7.0 的试试看。。、、
      

  2.   

    <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
           属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
           如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
     <property name="maxStatements" value="0"/>
    <!--连接池用完时客户调用getConnection()后等待获取连接的时间,单位:毫秒。超时后会抛出-->
     <!--SQLEXCEPTION,如果设置0,则无限等待。Default:0-->
     <property name="checkoutTimeout" value="100"/>
      

  3.   

    换容器和连接池真的有用吗...
    共用tomcat,公共mysql
      

  4.   

    虽然共用了tomcat,但是不同项目
    虽然共用了mysql,但是不同数据库难道所使用的c3p0的连接池实例是同一个吗?如果是因为这个引起的死锁问题,要么连接池方有相关配置可以修改,要么就是尝试换连接池,因为貌似都是外设的事情,和业务逻辑无关。
      

  5.   

    应该是c3p0在同一tomcat下重复注册的问题,我改成一个用c3p0,一个用proxool ,暂时没有问题了