6

나는 hirbernate를 사용하여 무거운로드 된 자바 응용 프로그램을 가지고 있습니다. 그리고 연결 풀 DBCP로 사용했지만 연결이 끊어지는 문제가있었습니다. 내가 c3p0로 바꿨다. 하지만 지금은 때로는 스레드를 bloks 그리고 난 왜 몰라. 여기처럼 :데이터베이스 연결 풀링 라이브러리에 가장 적합한 선택은 무엇입니까? (c3p0 문제)

"[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) 

' 내 스택 트레이스 덤프는 잠시 서버가 completly 차단 된에 있도록이 스레드가 잠금 < 0x00007fa7286d9728>와 함께, 내 모든 다른 스레드를 차단 것으로 나타났다. 하나의 스레드가 오랫동안 다른 스레드를 모두 차단하고 있거나이 스레드가 소비 한 시간이 극도로 길지만 결과가 제 시스템이 완전히 차단되어 극단적으로 느린 경우이 스레드가 얼마나 오래 실행되는지는 잘 모르겠습니다. 나는 많이 봤지만이 문제를 해결하는 방법을 모른다. 가능한 한 빨리 연결을 닫고 트레드를 완료하려면 수영장이 있어야합니다. 다른 연결 풀을 사용해야합니까? 나에게있어이 풀 라이브러리는 다른 라이브러리보다 조금 느리다 고하더라도이 풀 라이브러리는 100 % 저장, 교착 상태, 수명, 시현 등 절대적으로 필요합니다. 무슨 뜻 이죠 어떤 도움

+0

죄송합니다 이전 스레드를 부딪히지 만, 얼마 전에 주제에 대한 약간의 연구를했습니다. http://stackoverflow.com/questions/5640146/java-jdbc-connection-pool-library-choice-in- 2011 –

답변

1

1)에 대한

덕분에 DBCP에 손실 연결에 대해 뭐라고? MySQL을 사용합니까? 나는 약간의 활동이 어떤 시간 동안 없었다면 MySQL로 작업하면서 연결이 끊어지는 문제를 안다. 그것은 당신의 경우입니까?

2) 높은로드 된 응용 프로그램에서 최대 절전 모드를 사용하는 것은 좋지 않습니다. 최대 절전 모드는 너무 복잡하고 특히 복잡한 데이터와 릴레이션에서 느리다. (예를 들어 데이터를 가져오고 싶어도 모든 세션에서 트랜잭션이 필요하다) 3) 이유가 너무 많아서 풀에 스레드가 충분하지 않을 수있다. ?

높은로드 프로젝트에 참여했습니다. 우리는 부드러운 데이터 (매우 복잡한 매핑이없는 여러 레코드로 구성된 요청이 많음)와 무거운 데이터의 경우 JDBC를 통한 자체 작성된 래퍼 (하드 수동 매핑이있는 SP를 통해 수천 개의 레코드를 요청하지 않음)를 위해 Hibernate를 사용합니다. 그리고 우리는 DBCP에 아무런 문제가 없었습니다. 오랫동안 사용하지 않으면 MySQL 데이터베이스에 연결이 끊어졌습니다.

3

BoneCP - http://jolbox.com을 살펴볼 수 있습니다.

C3P0/DBCP보다 훨씬 뛰어난 성능과 지금까지 교착 상태에 대한보고가 없습니다.

+0

BoneCP는 더 이상 개발을 많이받지 못하고 있으며 더 많은 연결을 생성해야하는 문제가 있습니다. 개발자가 작업을 재개하면서 C3P0으로 돌아갈 생각입니다. – leebutts

+0

BoneCP 개발이 다시 시작되었습니다. – wwadge

+0

Tomcat 풀을 사용하기 시작하면서 지금까지 좋은 일을하고있는 것 같습니다. – leebutts

관련 문제