2016-07-21 79 views
0

我遇到了C3P0 APPARENT DEAD的問題。我在這裏看過很多其他相關的問題,但無法解決問題。如果有人可以提出任何可能的解決方案,那將是感恩!明顯死鎖c3p0問題

C3P0版本:在控制檯視圖c3p0-0.9.5.2

C3P0配置XML文件

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
    destroy-method="close"> 
    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver" /> 
    <property name="jdbcUrl" 
     value="jdbc:oracle:thin:@transport-crash-ora-tst.cee.wisc.edu:1521:DTCRDBT" /> 
    <property name="user" value="transdev" /> 
    <property name="password" value="Its2$123" /> 
    <property name="maxPoolSize" value="10" /> 
    <property name="maxStatements" value="0" /> 
    <property name="minPoolSize" value="5" /> 
    <property name="statementCacheNumDeferredCloseThreads" value="1"></property> 
</bean> 

消息

[localhost-startStop-1] INFO com.mchange.v2.c3p0.C3P0Registry - Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10] 
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 
[localhost-startStop-1] INFO com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 72r5me9i3xucoj6ds3mi|10319844, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> oracle.jdbc.driver.OracleDriver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 72r5me9i3xucoj6ds3mi|10319844, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:oracle:thin:@transport-crash-ora-tst.cee.wisc.edu:1521:DTCRDBT, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 10, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 5, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 1, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ] 
[localhost-startStop-1] WARN com.mchange.v2.resourcepool.BasicResourcePool - Bad pool size config, start 3 < min 5. Using 5 as start. 
[C3P0PooledConnectionPoolManager[identityToken->72r5me9i3xucoj6ds3mi|10319844]-AdminTaskTimer] WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner - com[email protected]7bd1346f -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks! 
[C3P0PooledConnectionPoolManager[identityToken->72r5me9i3xucoj6ds3mi|10319844]-AdminTaskTimer] WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner - com[email protected]7bd1346f -- APPARENT DEADLOCK!!! Complete Status: 
Managed Threads: 3 
Active Threads: 3 
Active Tasks: 
    com[email protected]342bcf5e 
     on thread: C3P0PooledConnectionPoolManager[identityToken->72r5me9i3xucoj6ds3mi|10319844]-HelperThread-#2 
    com[email protected]46abe7f8 
     on thread: C3P0PooledConnectionPoolManager[identityToken->72r5me9i3xucoj6ds3mi|10319844]-HelperThread-#1 
    com[email protected]5d53fa5 
     on thread: C3P0PooledConnectionPoolManager[identityToken->72r5me9i3xucoj6ds3mi|10319844]-HelperThread-#0 
Pending Tasks: 
    com[email protected]3ebf49a7 
    com[email protected]54043011 
Pool thread stack traces: 
Thread[C3P0PooledConnectionPoolManager[identityToken->72r5me9i3xucoj6ds3mi|10319844]-HelperThread-#2,5,main] 
    java.net.PlainSocketImpl.socketConnect(Native Method) 
    java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    java.net.Socket.connect(Socket.java:589) 
    oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:162) 
    oracle.net.nt.ConnOption.connect(ConnOption.java:133) 
    oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:411) 
    oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:464) 
    oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:594) 
    oracle.net.ns.NSProtocol.connect(NSProtocol.java:229) 
    oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360) 
    oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486) 
    oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715) 
    oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385) 
    oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30) 
    oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564) 
    com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175) 
    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220) 
    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206) 
    com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203) 
    com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) 
    com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) 
    com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) 
    com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870) 
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696) 
Thread[C3P0PooledConnectionPoolManager[identityToken->72r5me9i3xucoj6ds3mi|10319844]-HelperThread-#0,5,main] 
    java.net.PlainSocketImpl.socketConnect(Native Method) 
    java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    java.net.Socket.connect(Socket.java:589) 
    oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:162) 
    oracle.net.nt.ConnOption.connect(ConnOption.java:133) 
    oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:411) 
    oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:464) 
    oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:594) 
    oracle.net.ns.NSProtocol.connect(NSProtocol.java:229) 
    oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360) 
    oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486) 
    oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715) 
    oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385) 
    oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30) 
    oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564) 
    com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175) 
    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220) 
    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206) 
    com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203) 
    com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) 
    com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) 
    com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) 
    com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870) 
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696) 
Thread[C3P0PooledConnectionPoolManager[identityToken->72r5me9i3xucoj6ds3mi|10319844]-HelperThread-#1,5,main] 
    java.net.PlainSocketImpl.socketConnect(Native Method) 
    java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    java.net.Socket.connect(Socket.java:589) 
    oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:162) 
    oracle.net.nt.ConnOption.connect(ConnOption.java:133) 
    oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:411) 
    oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:464) 
    oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:594) 
    oracle.net.ns.NSProtocol.connect(NSProtocol.java:229) 
    oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360) 
    oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486) 
    oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715) 
    oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385) 
    oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30) 
    oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564) 
    com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175) 
    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220) 
    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206) 
    com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203) 
    com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) 
    com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) 
    com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) 
    com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870) 
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696) 

回答

0

線程正在試圖獲取連接從您的數據庫管理系統都不成功,也沒有與例外失敗。他們只是凍結。這是您需要調試的問題。它可能是某種網絡/防火牆類型的問題。例如,通過AWS,試圖連接到機器或服務而未配置安全組以允許連接通常會導致此類掛起。

做一個第一件事情就是要確保你可以在任何地方使用你應用程式的DriverManager.getConnection生活連接()。

(如果你願意,你可以在你的bean xml中暫時將「com.mchange.v2.c3p0.ComboPooledDataSource」更改爲「com.mchange.v2.c3p0.DriverManagerDataSource」,看看有沒有「工作」。性能會很差,因爲DriverManagerDataSource這個確實沒有池,但你可以看到所有或某些客戶端線程是否掛試圖獲取連接時。)

如果您的應用程序通常能夠獲得連接,但他們偶爾掛像這樣,並且您無法解決掛起問題,則可以嘗試使用兩個c3p0配置屬性解決此問題:

maxAdministrativeTaskTime可讓您設置超時後c3p0的線程池將嘗試中斷()凍結任務

numHelperThreads可讓您在開始看到APPARENT DEADLOCK消息之前增加必須被凍結捕獲的線程數。