2012-12-31 23 views
6

Tôi có ứng dụng bảng điều khiển bị treo trong khi thực thi. Dưới đây là cấu hình của tôi:c3p0 bị treo trong awaitCó sẵn với hibernate

cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
    cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/db?user=db&password=db"); 
    cfg.setProperty("hibernate.connection.username", "db"); 
    cfg.setProperty("hibernate.connection.password", "db"); 
    cfg.setProperty("hibernate.connection.pool_size", "5"); 
    cfg.setProperty("hibernate.connection.autocommit", "false"); 
    cfg.setProperty("hibernate.c3p0.min_size", "5"); 
    cfg.setProperty("hibernate.c3p0.max_size", "20"); 
    cfg.setProperty("hibernate.c3p0.timeout", "300"); 
    cfg.setProperty("hibernate.c3p0.max_statements", "50"); 
    cfg.setProperty("hibernate.c3p0.idle_test_period", "3000"); 

Đây là stacktrace tôi:

"main" prio=10 tid=0x000000000168f800 nid=0x1c37 in Object.wait() [0x00007fa60d0ad000] 
    java.lang.Thread.State: WAITING (on object monitor) 
     at java.lang.Object.wait(Native Method) 
     - waiting on <0x00000007400f4c68> (a com.mchange.v2.resourcepool.BasicResourcePool) 
     at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1315) 
     at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) 
     - locked <0x00000007400f4c68> (a com.mchange.v2.resourcepool.BasicResourcePool) 
     at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) 
     at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
     at org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:84) 
     at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:281) 
     at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) 
     at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) 
     at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67) 
     at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160) 
     at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1392) 
     at org.kriyak.parser.IndexArchiveRapid.indexFile(IndexArchiveRapid.java:70) 
     at org.kriyak.parser.IndexArchiveRapid.main(IndexArchiveRapid.java:53) 

tôi mở chỉ có một conencton và nó dường như không phải là tôi bị rò rỉ chúng. Và tôi cũng sử dụng một sợi. Tôi chưa điều chỉnh bất kỳ cài đặt mysql nào ngoại trừ việc sử dụng bộ nhớ. Mysql hoạt động tốt từ giao diện điều khiển. Tại sao điều này có thể xảy ra? Đây có phải là lỗi c3p0 không?

+0

Đây có phải là luồng duy nhất trong ứng dụng của bạn không? – parsifal

+0

vâng, đó là chủ đề duy nhất –

Trả lời

13

điều này xảy ra ngay lập tức hay sau một thời gian? có nghĩa là, việc kiểm tra ban đầu thành công, nhưng sau đó treo như thế này? nếu có, nó trông giống như một rò rỉ kết nối. hãy thử thiết lập c3p0 params unreturnedConnectionTimeout và debugUnreturnedConnectionStackTraces để xem có rò rỉ không. Xem http://www.mchange.com/projects/c3p0/#configuring_to_debug_and_workaround_broken_clients, http://www.mchange.com/projects/c3p0/#unreturnedConnectionTimeout, http://www.mchange.com/projects/c3p0/#debugUnreturnedConnectionStackTraces.

nếu điều này xảy ra ngay lập tức, nếu không có kết nối nào được kiểm tra thành công, câu hỏi đặt ra là liệu hồ bơi có bao giờ thành công khi có được kết nối hay không. theo mặc định, nếu nó không bao giờ thành công, sau khoảng 30 giây, luồng của bạn sẽ bị hỏng với lỗi. (nó không giống như bạn đã làm điều này, nhưng nếu ví dụ bạn muốn thiết lập gainRetryAttempts bằng không, c3p0 có thể treo vô thời gian chờ kết nối.)

để gỡ lỗi các vấn đề c3p0, sẽ rất hữu ích để nắm bắt phiên bản và thông tin cấu hình c3p0 đổ vào các bản ghi ở mức INFO khi khởi tạo pool.

chúc may mắn!

+0

Tôi bị thiếu sess.close(). Tôi chấp nhận câu trả lời của bạn. –

+0

Tôi đã không đóng kết nối cơ bản, được yêu cầu rõ ràng trong trường hợp của tôi. – Niranjan

Các vấn đề liên quan