Chúng tôi có các lần bế tắc rõ ràng định kỳ trên hệ thống sản xuất của chúng tôi mà chúng tôi dường như không thể đi đến cuối. Chúng tôi không thể theo dõi bất kỳ mối tương quan nào với số lượng người dùng trực tuyến và dường như chúng tôi không có kết nối khả dụng.Rối loạn lặp lại rõ ràng định kỳ với c3p0, Oracle và Hibernate
Chúng tôi có ứng dụng Java EE kết nối với Oracle thông qua Hibernate và c3p0. cấu hình C3P0 của chúng tôi là:
minPoolSize=10
maxPoolSize=300
initialPoolSize=30
acquireIncrement=10
maxIdleTime=1800
maxStatementsPerConnection=0
numHelperThreads=5
Bế tắc đầu ra log rõ ràng luôn trông nhiều hơn hoặc ít hơn như thế này:
[com.mchange.v2.async.ThreadPoolAsynchronousRunner] (Timer-1) com[email protected]4c9f1b4d -- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 5
Active Threads: 5
Active Tasks:
[email protected]86 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
[email protected]01 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
[email protected]c4 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#4)
[email protected]8e (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
[email protected]f8 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#3)
Pending Tasks:
[email protected]e5
[email protected]5d
[email protected]a1
[email protected]eb
[email protected]35
Các thực tế hồ bơi thread đống dấu vết khác nhau, và tôi đã thêm một số ví dụ dưới đây:
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#4,5,jboss]
java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:45)
java.lang.StringBuilder.<init>(StringBuilder.java:80)
oracle.net.ns.Packet.<init>(Packet.java:513)
oracle.net.ns.ConnectPacket.<init>(ConnectPacket.java:64)
oracle.net.ns.NSProtocol.connect(NSProtocol.java:278)
oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,jboss]
oracle.jdbc.driver.T4CTTIoauthenticate.processRPA(T4CTTIoauthenticate.java:491)
oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:295)
oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:390)
oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:356)
oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:1
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,jboss]
oracle.net.ns.NSProtocol.connect(NSProtocol.java:346)
oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Mọi đề xuất về nơi chúng tôi nên điều tra? Đây có phải là c3p0, các truy vấn của chúng tôi, mã của chúng tôi, cơ sở dữ liệu không?
Bạn có thể loại bỏ cơ sở dữ liệu vì không có mã lỗi ORA-00060. Nếu bạn muốn kiểm tra lại, trong trường hợp ngoại lệ cơ sở dữ liệu bị mất ở đâu đó, các lỗi bế tắc cũng được lưu trong nhật ký cảnh báo. Yêu cầu DBA của bạn kiểm tra (các) nhật ký cảnh báo cho deadlocks, tốt nhất là vào một thời điểm cụ thể. –
@jonearles Cảm ơn, chúng tôi sẽ yêu cầu DBA kiểm tra. Chúng tôi đang hướng tới các vấn đề với các truy vấn của chúng tôi hoặc có lẽ là cấu hình, nhưng với thông tin hạn chế, chúng tôi không chắc chắn cách tiếp tục. – Zecrates