6

Tôi có ứng dụng java được tải nặng bằng hirbernate. Và tôi sử dụng để sử dụng như là kết nối DBCP hồ bơi, nhưng nó đã có vấn đề với các kết nối mất mát. Hơn tôi chuyển sang c3p0. Nhưng bây giờ nó đôi khi bloks thread và tôi không biết tại sao. Giống như ở đây:Lựa chọn tốt nhất cho thư viện kết nối cơ sở dữ liệu kết nối là gì? (c3p0 problem)

"[email protected]" prio=10 tid=0x00007fa6b0940000 nid=0x4e12 runnable [0x00007fa6f8f1c000] 
    java.lang.Thread.State: RUNNABLE 
    at com.mchange.v2.resourcepool.BasicResourcePool.doCheckinManaged(BasicResourcePool.java:1258) 
    at com.mchange.v2.resourcepool.BasicResourcePool.checkinResource(BasicResourcePool.java:647) 
    - locked <0x00007fa7286d9728> (a com.mchange.v2.resourcepool.BasicResourcePool) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$ConnectionEventListenerImpl.doCheckinResource(C3P0PooledConnectionPool.java:636) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$ConnectionEventListenerImpl.connectionClosed(C3P0PooledConnectionPool.java:630) 
    at com.mchange.v2.c3p0.util.ConnectionEventSupport.fireConnectionClosed(ConnectionEventSupport.java:55) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.fireConnectionClosed(NewPooledConnection.java:510) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnection(NewPooledConnection.java:381) 
    at com.mchange.v2.c3p0.impl.NewProxyConnection.close(NewProxyConnection.java:1246) 
    - locked <0x00007fa794ccf020> (a com.mchange.v2.c3p0.impl.NewProxyConnection) 
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.closeConnection(LocalDataSourceConnectionProvider.java:96) 
    at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:474) 
    at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:408) 
    at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:347) 
    at org.hibernate.impl.SessionImpl.close(SessionImpl.java:325) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSession(SessionFactoryUtils.java:791) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSessionOrRegisterDeferredClose(SessionFactoryUtils.java:777) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.releaseSession(SessionFactoryUtils.java:755) 

' stacktrace bãi của tôi cho thấy rằng chủ đề này chặn tất cả các chủ đề khác của tôi, với khóa < 0x00007fa7286d9728>, như vậy trong một máy chủ trong khi đã hoàn toàn bị chặn. Tôi không chắc chuỗi này chạy bao lâu, nếu một luồng đang chặn tất cả các luồng khác trong một thời gian dài, hoặc nếu thời gian tiêu thụ bởi luồng này là cực kỳ dài, nhưng kết quả là, hệ thống của tôi đã bị chặn hoàn toàn và bị chậm lại. Tôi googled rất nhiều, nhưng tôi không biết làm thế nào để giải quyết vấn đề này. Tôi cần hồ bơi để đóng kết nối và kết thúc tread càng sớm càng tốt. Tôi có nên sử dụng một số hồ bơi kết nối khác không? Đối với tôi nó là hoàn toàn cần thiết rằng thư viện hồ bơi này là 100% tiết kiệm, không có deadlocks, lifelocks, đói, ngay cả khi nó là hơi chậm hơn so với các thư viện khác.

cảm ơn sự giúp đỡ nào

+0

Xin lỗi vì đã gặp phải một chuỗi cũ, nhưng một thời gian trước, tôi đã thực hiện một số nghiên cứu nhỏ về chủ đề: http://stackoverflow.com/questions/5640146/java-jdbc-connection-pool-library-choice-in- 2011 –

Trả lời

1

1) Ý của bạn là gì khi nói về kết nối bị mất trong DBCP? Bạn có sử dụng MySQL không? Tôi biết vấn đề với kết nối bị mất khi làm việc với MySQL nếu không có hoạt động nào trong một thời gian. Đó là trường hợp của bạn?

2) Sử dụng Hibernate trong ứng dụng được tải cao không phải là lựa chọn rất tốt. Hibernate quá lớn và chậm đặc biệt là dữ liệu phức tạp và quan hệ (ví dụ nó cần giao dịch trên mọi phiên thậm chí chúng tôi chỉ muốn lấy dữ liệu)

3) Có thể là lý do quá nhiều chủ đề cần thiết và không đủ chủ đề trong hồ bơi ?

Tôi đã tham gia vào dự án được tải cao. Chúng tôi sử dụng Hibernate cho dữ liệu mềm (nhiều yêu cầu bao gồm một số bản ghi không có ánh xạ rất phức tạp) và trình bao bọc tự viết trên JDBC cho dữ liệu nặng (không yêu cầu nhiều nghìn bản ghi qua SP với ánh xạ thủ công cứng). Và chúng tôi không gặp bất kỳ vấn đề gì với DBCP ngoại trừ việc mất kết nối với cơ sở dữ liệu MySQL sau thời gian không hoạt động lâu.

3

Bạn có thể muốn xem xét BoneCP - http://jolbox.com.

Hiệu suất tốt hơn nhiều so với C3P0/DBCP và không có báo cáo về bất kỳ deadlocks nào cho đến thời điểm này.

+0

BoneCP không nhận được nhiều sự phát triển nữa và chúng tôi đang gặp phải vấn đề với việc tạo ra nhiều kết nối hơn mức cần thiết. Chúng tôi đang nghĩ về việc quay lại C3P0 khi nhà phát triển tiếp tục làm việc trên nó. – leebutts

+0

Phát triển BoneCP đã được khởi động lại. – wwadge

+0

Rất vui khi nghe, trong thời gian đó chúng tôi đã bắt đầu sử dụng hồ bơi Tomcat và có vẻ như đang làm một công việc tốt cho đến giờ. – leebutts

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