[2013-02-14 20:37:46] WARN  [com.mchange.v2.resourcepool.BasicResourcePool] - Failed to destroy resource: com.mchange.v2.c3p0.impl.NewPooledConnection@14c7262
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$KeyIterator.next(HashMap.java:828)
at com.mysql.jdbc.Connection.closeAllOpenStatements(Connection.java:2191)
at com.mysql.jdbc.Connection.realClose(Connection.java:4777)
at com.mysql.jdbc.Connection.close(Connection.java:2172)
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:474)
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:191)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)[2013-02-15 11:48:15] WARN  [com.mchange.v2.resourcepool.BasicResourcePool] - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@11079b5 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException
MESSAGE: java.net.SocketException: No buffer space available (maximum connections reached?): connectSTACKTRACE:java.net.SocketException: java.net.SocketException: No buffer space available (maximum connections reached?): connect
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:276)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2666)
at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
** END NESTED EXCEPTION **Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2741)
at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
[2013-02-15 11:49:43] WARN  [com.mchange.v2.async.ThreadPoolAsynchronousRunner] - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@9184d1 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
[2013-02-15 11:49:44] WARN  [com.mchange.v2.async.ThreadPoolAsynchronousRunner] - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@9184d1 -- APPARENT DEADLOCK!!! Complete Status: 
Managed Threads: 3
Active Threads: 0
Active Tasks: 
Pending Tasks: 
com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask@1217953
com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask@a45b9a
com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask@79e819
com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask@174e98f
com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask@91be7f
com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask@719386
com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask@8c7d1c
Pool thread stack traces:
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,]
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,]
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,]c3p0

解决方案 »

  1.   

    我的配置是这样的:
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass">
    <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name="jdbcUrl">
    <value>jdbc:mysql://127.0.0.1:3306/smsdb?useUnicode=true&amp;characterEncoding=UTF-8&amp; </value>
    </property>
    <property name="user">
    <value>root</value>
    </property>
    <property name="password">
    <value>123456</value>
    </property>
    <!--连接池中保留的最小连接数。 -->
    <property name="minPoolSize">
    <value>10</value>
    </property> <!--连接池中保留的最大连接数。Default: 15 -->
    <property name="maxPoolSize">
    <value>35</value>
    </property> <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
    <property name="initialPoolSize">
    <value>15</value>
    </property> <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
    <property name="maxIdleTime">
    <value>300</value>
    </property> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
    <property name="acquireIncrement">
    <value>0</value>
    </property> <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。 
    如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
    <property name="maxStatements">
    <value>0</value>
    </property> <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
    <property name="idleConnectionTestPeriod">
    <value>100</value>
    </property> </bean>
      

  2.   

    <property name="maxIdleTime">
                <value>300</value>
            </property>
    好像是这个,保持连接时间应该设置大点
      

  3.   

    是mysql的最大连接数吗? mysql的最大连接数为800
      

  4.   

    请问下如果maxIdleTime设置成300秒会影响到那些方面?
      

  5.   


    <property name="minPoolSize" value="1" />
    <property name="maxPoolSize" value="300" />
    <property name="maxIdleTime" value="60" />
    <property name="acquireIncrement" value="5" />
    <property name="initialPoolSize" value="1" />
    <property name="idleConnectionTestPeriod" value="60" />我设置成这样就跑的很好。
      

  6.   

     WARN之类的警告都不会报吗?还有一个问题想请教一下,请问大侠用过mybatis吗? 我用spring+ mybatis 需要手动的去关闭连接吗
      

  7.   

    好的,还有个问题,请问假如我有三个程序里面都用到了c3p0,三个程序都放在了一个服务器的Tomcat下,这样做的话,有什么地方需求注意的吗?